시스템에서 실제로 지속되는 유일한 것은 파일입니다. 그것은 당신이 사용해야 할 것입니다. 다음은 init.d 스크립트를 사용하는 솔루션입니다.
다음과 같은 (간단한) 스크립트를 생각해 봅시다 /etc/init.d/myupdate
.
#! /bin/sh
### BEGIN INIT INFO
# Provides: myupdate
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
case "$1" in
start)
/path/to/update/script
;;
stop|restart|reload)
;;
esac
당신이 활성화 경우 update-rc.d myupdate defaults
의 start
조치는 부팅시 실행됩니다. 이제 업데이트 스크립트가 재부팅을 요구할 때 :
touch /var/run/rebooting-for-updates
sudo reboot
이 솔루션을 사용하면 업데이트 스크립트를 두 부분으로 나눌 수 있습니다.
before_reboot(){
# Do stuff
}
after_reboot(){
# Do stuff
}
if [ -f /var/run/rebooting-for-updates ]; then
after_reboot
rm /var/run/rebooting-for-updates
update-rc.d myupdate remove
else
before_reboot
touch /var/run/rebooting-for-updates
update-rc.d myupdate defaults
sudo reboot
fi
before_reboot
코드 섹션을 실행하고 에 파일을 만든 다음 /var/run
재부팅합니다. 부팅시 스크립트가 다시 호출되지만 파일이 존재 after_reboot
하므로 대신에 호출됩니다 before_reboot
.
update-rc.d
루트 권한 이 필요합니다.
파일을 사용하지 않고 ( Stephen Ostermiller 의 의견에서) :
getopts
유틸리티에 익숙한 경우 파일 대신 옵션을 사용할 수 있습니다. init 스크립트에서 다음을 사용하여 스크립트를 호출하십시오.
/path/to/update/script -r
스크립트에서 파일 대신 옵션을 확인하십시오. 옵션없이 스크립트를 한 번 호출하면 init.d가 부팅시 다시 호출합니다 -r
.
# Set AFTER_REBOOT according to options (-r).
if [ "x$AFTER_REBOOT" = "xyes" ]; then
# After reboot
else
# Before reboot
fi
옵션 처리에 대한 자세한 내용은 여기 (짧은 옵션 만 해당)를 참조하십시오 . 또한 update-rc.d
이 작업을 한 번만 유지하기 위해 다른 주석에서 스크립트를 편집했습니다 .