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

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

Linux 개발에 대해 자세히 알아보기 위해 가상 머신(VirtualBox)에서 ubuntu 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

결과적으로 단 한 번의 터치(사전 시작의 첫 번째 터치)만 이루어집니다. 잠을 자고 나서 작동하는 터치 중 하나를 보려면 무엇을 변경해야 합니까? 아니면 이 작업을 수행하는 더 쉬운 방법이 있습니까?

미리 감사드립니다.

답변1

그만큼신생 기업 소개, 요리책 및 모범 사례시작 작업 및 작업을 생성하는 데 사용할 수 있는 수많은 코드 조각이 있습니다.

그만큼종료 프로세스요리책의 섹션에는 /etc/init/rc.conf실행되고 호출될 것이라고 나와 있습니다 /etc/init.d/rc. 결과적으로 이는 결국 을 호출합니다 /etc/init.d/sendsigs. 따라서 귀하 start on starting rc의 작업은 rc(및 일반적으로 프로세스를 종료하는 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

답변2

내 생각엔 이 작업을 통해 수행할 수 없는 것 같습니다.갑자기 나타나다,/etc/init.d/sendsigs다음에 의해 호출되는 스크립트갑자기 나타나다중지/재시작 시 killall5 -910초 이내에 모든 프로세스( )를 종료하고, 성공하지 못하더라도 모든 프로세스를 언마운트하고 종료합니다.

가장 좋은 방법은 녹슨 것을 사용하는 것입니다./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 .

이렇게 하면 스크립트가센시그런레벨 0~6의 스크립트(종료, 재부팅) 이 샘플 스크립트는 날짜를 기록한 다음 20초 동안 대기한 다음 다시 날짜를 기록합니다./루트/s.log.)

더 많은 정보:

관련 정보