使用 upstart 执行非守护进程任务

使用 upstart 执行非守护进程任务

我希望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

每次系统输入runlevel0、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

相关内容