Я хотел бы иметь foo do-startup-things
работайте на начальной загрузке, и foo do-shutdown-things
работайте на завершении работы где foo
моя собственная программа.
Похоже, что Выскочка является хорошим кандидатом, чтобы сделать это, но Выскочка, кажется, разработана для использования с демонами, таким образом работая service foo stop
дает ошибку stop: Unknown instance:
потому что процесс, выполняемый, когда задание запуска, больше было выполнено не работает.
Существует ли способ использовать Выскочку для выполнения задач на запуске и завершении работы, не запуская демона?
Да, это возможно. Необходимо определить два задания задачи, вот пример:
Первый создают 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, и выскочка init процесс будет работать, это из-за" запускается на runlevel [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