
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 -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 .
이렇게 하면 스크립트가센시그런레벨 0~6의 스크립트(종료, 재부팅) 이 샘플 스크립트는 날짜를 기록한 다음 20초 동안 대기한 다음 다시 날짜를 기록합니다./루트/s.log.)
더 많은 정보: