Использование upstart с остановкой неизвестного экземпляра

8

Я только начинаю выскочить, поэтому я написал очень простой скрипт для печати в файл журнала, vm-service.confкоторый я вставил /etc/init:

description "Virtual Images"
author      "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn   


script
echo "DEBUG: `set`" >> /tmp/vm-service.log

end script


pre-stop script
    echo "DEBUG: `set`" >> /tmp/vm-service.log
end script

если я бегу sudo start vm-service, он выводит:

vm-service start/running, process 29034

Но когда я бегу sudo stop vm-service, он выводит:

stop: Unknown instance

Я попытался запустить sudo initctl reload-configuration, но я все еще получаю ошибку при остановке.

Я посмотрел кулинарную книгу, но, наверное, мне не хватает чего-то очевидного.

adviner
источник

Ответы:

7

Upstart будет считать работу остановленной, если завершится основной процесс (то, что выполняется, если задан сценарий или разделы exec). Upstart запустит процесс после запуска.

Итак, происходит то, что первый скрипт запущен и завершается, Upstart считает, что задание остановлено, затем второй скрипт запускается и завершается. Если вы выполнили команду остановки на уже остановленном задании, она напечатает сообщение, которое вы увидели.

Чтобы справиться с этим, используйте предстартовый раздел:

pre-start exec foo --bar

post-start exec baz --foo

если вы это сделаете, Upstart увидит задание как запущенное после завершения предстартового раздела, а не как остановленное.

CameronNemo
источник