Вы можете определить простое задание задачи, которое начинается с выбранного вами события, запустить ваш скрипт и в конце испускать событие, чтобы запустить другое задание.
Например:
# mainJob -
#
# This service emit myEvent to run firstJob
description "emit myEvent to run firstJob"
start on runlevel [2345]
task
console log
script
echo "(startTask) $UPSTART_JOB -- $UPSTART_EVENTS"
exec /path/to/your/script
initctl emit -n myEvent
end script
Чтобы не изменять сценарий выскочки двух других заданий, вы должны переопределить файлы, которые позволят вам изменить способ запуска и остановки задания путем изменения начала и остановки на условиях.
Следуя моим примерам, я создал простой firstJob.conf, подобный этому:
# firstJob -
#
# This service print environment variable
description "print environment variable"
start on runlevel [2345]
stop on runlevel [016]
task
console log
script
if [ "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" -o "$RUNLEVEL" = "6" ]; then
exec echo "(stopTask) $UPSTART_JOB -- $UPSTART_EVENTS"
else
exec echo "(startTask) $UPSTART_JOB -- $UPSTART_EVENTS"
fi
end script
И затем я переопределяю начало при условии создания файла переопределения:
echo "start on myEvent" > /etc/init/firstJob.override
Итак firstJob начнется на myEvent, сгенерированном mainJob и остановится на runlevel [016]
. Я тестировал эти задания на lubuntu 12.04 и после перезагрузки, которые я нашел в /var/log/upstart/firstJob.log:
(startTask) firstJob -- myEvent
Вы должны проверить, нужно ли запускать «другие два задания» для определенного условия события, и убедитесь, что mainJob запускается в этих событиях.