私はを頂きたい foo do-startup-things
起動時に実行し、foo do-shutdown-things
シャットダウン時に実行します。foo
は自分のプログラムです。
Upstartはこれを行うのに適した候補のようですが、Upstartはデーモンで使用するように設計されているため、service foo stop
はエラーstop: Unknown instance:
これは、起動ジョブが実行されたときに実行されていたプロセスが実行されなくなったためです。
Upstartを使用して、デーモンを起動せずに起動およびシャットダウン時にタスクを実行する方法はありますか?
はい、可能です。 2つのタスクジョブを定義する必要があります。以下に例を示します。
最初に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になり、「start on runlevel [ 016] "。
テストできます:
Sudo start stopTaskJob
PDATE:これは、単一のファイルでこれを行う方法の例です。
# 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