Я пытаюсь написать сценарий выскочки, который проверяет, работает ли мой процесс, проверяя его HTTP-интерфейс. Пока я просто не могу получить post-start
пункт к работе. Вот упрощенная версия, которую я пробовал:
description "my application"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 360 180
setuid myuser
setgid mygroup
chdir /my/directory
exec /bin/sleep 60
post-start script
sleep 5
stop
exit 1
end script
С терминала:
/etc/init$ sudo start myapp # returns after 5 seconds
myapp start/running, process 27477
jrantil@myserver:/etc/init$ ps -ef|grep sleep
107 27477 1 0 16:56 ? 00:00:00 /bin/sleep 60
jrantil 27482 26900 0 16:56 pts/1 00:00:00 grep --color=auto sleep
Может ли кто-нибудь сказать мне, почему мое приложение не закрывается через 5 секунд? Насколько я понял, если я не позвоню stop
он просто возродится.
Вы, вероятно, захотите сделать это сценарий задачи, а не служебный сценарий. Это означает, что демон инициализации Upstart не будет ожидать, что он будет продолжать работать, и не будет пытаться перезапустить его или отслеживать PID. Заменить stop
, exec
, и post-start
строфы с task
директиву, оставив что-то вроде этого:
description "my application" start on runlevel [2345] task setuid myuser setgid mygroup chdir /my/directory exec /bin/sleep 5
Очевидно, заменить exec
строчку с чем-то значимым для вас. Возможно вы хотите script
для выполнения нескольких команд подряд. Если вместо этого ваш процесс никогда не останавливается сам по себе, и вы хотите, чтобы Upstart завершил его через 5 секунд, попробуйте следующее:
description "my application" start on runlevel [2345] stop on kill-me-please setuid myuser setgid mygroup chdir /my/directory exec /bin/sleep 60 post-start script /bin/sleep 5 initctl emit kill-me-please end script