web-dev-qa-db-ja.com

非デーモンタスクにupstartを使用する

私はを頂きたい foo do-startup-things起動時に実行し、foo do-shutdown-thingsシャットダウン時に実行します。fooは自分のプログラムです。

Upstartはこれを行うのに適した候補のようですが、Upstartはデーモンで使用するように設計されているため、service foo stopはエラーstop: Unknown instance:これは、起動ジョブが実行されたときに実行されていたプロセスが実行されなくなったためです。

Upstartを使用して、デーモンを起動せずに起動およびシャットダウン時にタスクを実行する方法はありますか?

4
DanielGibbs

はい、可能です。 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
6
Lety