У меня задание Upstart, настроенное с использованием раздела task
, от которого зависит другое задание до его запуска. Однако это задание также должно ожидать запуска другой службы перед ее запуском. Это вызывает некоторые проблемы - задание запускается, если задание завершается до начала зависимого задания, но не запускается, если задание завершается после запуска задания.
Например, пусть task-a
будет задачей, от которой зависит задание, тогда это файл конфигурации задания:
start on (stopped task-a and started cups)
script
echo do stuff
end script
Как я могу получить задание, подобное приведенному выше, для запуска после задание завершено , но после начала другого задания? Я могу изменить задачу, если это необходимо, но я не думаю, что спать вечно - это очень хорошее решение. Версия Ubuntu в этом случае - 12.04.
У меня было бы первое задание, «излучающее» свой собственный сигнал (это команда):
initctl emit job-a-done
И прыгнул на это в моей выскочившей работе ...
start on started cups and job-a-done
Хорошо, поэтому после большой проблемы, пытающейся заставить это работать, я сдался. Я попробовал:
Заставляя задание запуститься после того, как одно задание запускается, и другой остановился (задача)
start on (started cups and stopped my-task)
Заставляя задание запуститься после того, как одно задание запускается, и другой испустил сигнал (см. ответ Oli),
start on (started cups and my-task-finished)
Заставляя задание запуститься после того, как оба задания запустились (задание задачи ожидает бесконечно),
start on (started cups and started my-task)
Ни одна из вышеупомянутых попыток не работала. Для ссылки я хотел иметь задание, запускаются, после того как CUPS запускается, и моя задача закончилась. Когда CUPS настроили принтеры, он будет медленно запускаться, и сценарий работал бы правильно (в случаях 1 и 3, 2 никогда не работал правильно). Однако то, когда CUPS не имел никаких принтеров, настроило его, запустится немедленно (я имею в виду, Выскочка WTF, почему это происходит во-первых?), но что еще более важно мое задание не работало бы.
Я пришел к выводу, что Выскочка в Ubuntu 12.04 LTS полностью повреждается. Я не уверен, является ли это ошибкой, которая исправлена в более новой версии Ubuntu, но это - довольно основная проблема.
Так, решение. Не используйте Выскочку. Переключитесь на systemd, если возможный или используют SysV в случаях, где это не доступно/не жизнеспособный для поддержания. О, и Канонический, зафиксируйте это.