Назад | Перейти на главную страницу

Почему этот сценарий выскочки не останавливает мой процесс?

Я пытаюсь написать сценарий выскочки, который проверяет, работает ли мой процесс, проверяя его 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