我希望foo do-startup-things
在启动时运行,并foo do-shutdown-things
在关机时运行foo
我自己的程序。
看起来 Upstart 是执行此操作的不错选择,但是 Upstart 似乎是为与守护进程一起使用而设计的,因此运行时service foo stop
会出现错误,stop: Unknown instance:
因为启动作业运行时执行的进程不再运行。
有没有办法使用 Upstart 在启动和关闭时执行任务而无需启动守护进程?
答案1
是的,这是可能的。你应该定义两个任务作业,下面是一个例子:
首先创建startTaskJob.conf
:
# startTaskJob -
#
# This service print "script start" and end
description "print script start"
start on runlevel [2345]
task
console log
script
exec echo "script start"
end script
你可以使用以下方法测试它:
sudo start startTaskJob
输出将保存在/var/log/upstart/startTaskJob.log
然后创建stopTaskJob.conf
:
# stopTaskJob -
#
# This service print "script stop" and end
description "print script stop"
start on runlevel [016]
task
console log
script
exec echo "script stop"
end script
每次系统输入runlevel
0、1 或 6 时,都会执行此脚本。在关机时runlevel
变为 0,并且 upstart init 进程将运行它,因为“在运行级别 [016] 上启动“。
你可以测试一下:
sudo start stopTaskJob
更新: 这是一个如何在单个文件中执行此操作的示例。
# taskJob -
#
# This service print environment variable
# start on runlevel
description "print environment variable"
start on runlevel [0123456]
task
console log
script
if [ "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" -o "$RUNLEVEL" = "6" ]; then
exec echo "(stopTask) $UPSTART_EVENTS - $RUNLEVEL - job $UPSTART_JOB"
else
exec echo "(startTask) $UPSTART_EVENTS - $RUNLEVEL - job $UPSTART_JOB"
fi
end script
我在lubuntu 12.04上测试了它,这是/var/log/upstart/taskJob.log
重启后的内容:
(stopTask) runlevel - 6 - job taskJob
(startTask) runlevel - 2 - job taskJob