프로세스가 10 초 이상 걸리는 경우 종료시 스크립트를 실행하도록 upstart를 어떻게 구성합니까?


11

리눅스 개발에 대해 더 배우기 위해 가상 머신 (VirtualBox)에서 우분투 11.10을 실행하고 있습니다. git 저장소를 사용하여 작업을 저장하고 작업을 번들로 묶고 가상 시스템이 실행되지 않는 동안 사용할 수 있도록 공유 폴더에 저장하는 스크립트를 작성했습니다.

vm이 꺼져있는 경우 내 작업을 항상 사용할 수 있도록 종료하기 전에이 스크립트를 자동으로 실행하고 싶습니다 (현재 스크립트를 수동으로 실행해야 함).

upstart가 이것을 달성하는 가장 좋은 방법인지는 모르겠지만 테스트로 작성한 구성입니다.

description     "test script to run at shutdown"

start on runlevel [056]

task

script
touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
end script

pre-start script
touch /media/sf_LinuxEducation/pre-start
sleep 15
touch /media/sf_LinuxEducation/pre-start-long
end script

post-start script
touch /media/sf_LinuxEducation/post-start
sleep 15
touch /media/sf_LinuxEducation/post-start-long
end script

pre-stop script
touch /media/sf_LinuxEducation/pre-stop
sleep 15
touch /media/sf_LinuxEducation/pre-stop-long
end script

post-stop script
touch /media/sf_LinuxEducation/post-stop
sleep 15
touch /media/sf_LinuxEducation/post-stop-long
end script

결과적으로 한 번의 터치 만 수행됩니다 (사전 시작의 첫 번째 터치). 수면이 끝난 후 터치 중 하나를 보려면 무엇을 변경해야합니까? 아니면 이것을 달성하는 더 쉬운 방법이 있습니까?

미리 감사드립니다.

답변:


7

갑자기 출세 소개, 요리 책 및 모범 사례는 신출내기 작업 및 일자리 창출에 사용하는 코드 조각의 큰 숫자가 있습니다.

쿡북 의 종료 프로세스 섹션에이 메시지 /etc/init/rc.conf가 실행되고 호출 /etc/init.d/rc됩니다. 차례로 이것은 결국 호출 /etc/init.d/sendsigs합니다. 따라서 start on starting rcrc 전에 작업이 실행됩니다 (일반적으로 프로세스가 종료되는 sigterms).

파일 : /etc/init/test.conf

description "test script to run at shutdown"

start on starting rc
task
exec /etc/init/test.sh

파일 : /etc/init/test.sh

touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long

1
이 질문에 대한 구체적인 예를 추가했지만 이벤트 별칭 만들기 의 설명서에 설명되어 있지만 작동하지 않습니다 (첫 번째 터치 만 종료시 실행) . 오류가 발생했는지 확인하십시오.
Tiris

티리스, 이거 효과가있어 재부팅 후 / var / log / syslog를보고, 특히 테스트 프로세스가 upstart에 의해 강제 종료되었는지 확인하고 싶습니다.
SpamapS

1
이 답변의 최신 편집이 작동합니다. 개정 내역을 확인하여 문제가있는 자식을보십시오. 나는 내가 편집을했다는 의견을 말 했어야한다고 생각한다 (또는 의견을 제거하고 새로운 의견을 추가하는 것이 더 적절합니까? 문제가있는 어린이가 왜 작동하지 않는지 아는 데 관심이 있습니다 (문서에 나와 있기 때문에).
티리스

test.conf 파일은 정확히 무엇을 의미합니까? test.conf라는 파일을 만들거나 rc.conf에 추가합니까?
heneryville

@heneryville test.conf은 임의의 파일 이름입니다. 당신은 쉽게 사용할 수 있습니다 whatEverYouWant.conf. 귀하의 의견은 또한 귀하가 답변에 언급 된 "수첩"을 읽지 않았 음을 보여줍니다. 섹션 4.2를 보면 작업 구성 파일에 대한 자세한 설명이 있습니다.
Tiris

7

나는이를 통해 수행 할 수 없다고 생각 신출내기 는 AS, /etc/init.d/sendsigs에 의해 호출되는 스크립트, 신출내기 정지가 / 다시 시작, 모든 프로세스 (죽 때 killall5 -9그 성공하지 않더라도가 10 초 이내)을하고, 그것을 간다 모든 것을 마운트 해제하고 종료합니다.

가장 좋은 방법은 녹슨 /etc/init.d 스타일 스크립트 를 사용하는 것 입니다.

예 : /etc/init.d/shutdown_job

#! /bin/sh
### BEGIN INIT INFO
# Provides:          shutdown_job
# Required-Start:    
# Required-Stop:     sendsigs
# Default-Start:
# Default-Stop:      0 6
# Short-Description: bla
# Description: 
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

do_stop () {
    date > /root/s.log
    sleep 20
    date >> /root/s.log
}

case "$1" in
  start)
    # No-op
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  stop)
    do_stop
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    exit 3
    ;;
esac

:

그런 다음 스크립트를 활성화하십시오

sudo update-rc.d shutdown_job start 19 0 6 .

그러면 sendigs 스크립트 앞에 스크립트가 실행 레벨 0 a 6 (종료, 재부팅)에 배치됩니다. 이 샘플 스크립트는 날짜를 기록한 다음 20 초 동안 휴면 한 다음 /root/s.log에 날짜를 다시 기록합니다 .)

더 많은 정보:


나는 이런 종류의 일을하는 데 전혀 익숙하지 않습니다. 이것이 작동하도록하는 좋은 가이드가 있습니까? 더 많은 정보로 편집하십시오.
Tiris

나는 이것을 시도했지만 작동하지 않습니다 (정확하지는 않습니다). 나는 추가 touch /media/sf_LinuxEducation/starttouch /media/sf_LinuxEducation/start-long날짜 명령 바로 옆에 있습니다. 날짜는 기록되지만 터치는 터치되지 않습니다. 스크립트가 실행될 때 해당 드라이브가 마운트 해제되었는지 궁금합니다. NN 인수와 관련이 있다고 생각하지만 실제로이 인수가 어떻게 작동하는지 잘 모르겠습니다 (man 페이지는 그것을 마음의 굽힘 방식으로 설명합니다). 이 인수에서 어떤 숫자 (또는 숫자 쌍)를 설정해야하는지 어떻게 알 수 있습니까?
티리스

/etc/rc6.d디렉토리 를 나열 할 때 표시되는 숫자에 따라 스크립트가 실행됩니다 . 따라서 마운트 해제를 수행하기 전에 19 개의 종료 스크립트를 실행해야합니다 (> 31). 그러나 가설을 시도해보고 /root대신 파일을 건드리지 않겠습니까?
주선

디렉토리를 /etc/rc6.d살펴보면 공유 폴더가 K70vboxadd스크립트 로 마운트 / 마운트 해제되고 있음을 알 수 있습니다. VB 공유 폴더를 마운트 해제하기 전에 스크립트에서 NN 인수를 71로 변경하면 스크립트가 실행됩니까? 오늘 나중에 시도하겠습니다.
티리스

잘 작동하지 않았다. 업데이트 : 명령 touch /root/start전에를 추가했는데 sleep 20파일이 생성되지 않았습니다. 왜 어디서부터 시작해야할지 모르겠습니다. 날짜가 /root/s.log파일에 행복하게 추가 된 이유는 무엇입니까?
티리스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.