Ubuntu — запустить PHP-скрипт с Upstart после перезагрузки

У меня есть следующий сценарий Upstart. Когда я запускаю следующую команду service worker-1 startвсе работает отлично. Я вижу бегущих рабочих с ps aux | grep php, Я также могу использовать service worker-1 stop который мне нужно перезагрузить / обновить работникам. Но, к сожалению, этот скрипт работает только частично при перезагрузке. Сценарий выполняется (начало: задание уже запущено: worker-1, когда я пытаюсь service worker-1 start) но я не вижу ни одного работающего работника с ps aux | grep php и конечно service worker-1 stop возвращается stop: Unknown instance:, У вас есть идеи, что может быть не так?

description "Starts/kills workers."author "Jiri Mihal"start on (started php5-fpm and started mysql)
stop on shutdown

pre-start script
echo "[`date`] Workers started" >> /var/log/worker-1.log
exec 2>>/var/log/worker-1.log
end script

post-start script
echo $$ > /var/run/worker-1.pid
for i in `seq 1 5`;
do
exec php /home/jiri/workers/dlapi.workers/workers/RpcWorkerLauncher.php Worker-1 >/dev/null 2>&1 &
done
end script

post-stop script
read -r FIRSTLINE < /var/run/worker-1.pid
kill $(($FIRSTLINE + 2))
kill $(($FIRSTLINE + 3))
kill $(($FIRSTLINE + 4))
kill $(($FIRSTLINE + 5))
kill $(($FIRSTLINE + 6))
rm /var/run/worker-1.pid
echo "[`date`] Workers stopped" >> /var/log/worker-1.log
end script

1

Решение

Сценарий выше почти правильный. Основная проблема заключалась в том, что PHP-скрипт инициировал работника RabbitMQ, но сервер RabbitMQ не был готов.

Я сделал несколько дополнительных настроек, и вот рабочее решение:

description "Starts/kills workers."author "Jiri Mihal"start on (rabbitmq-server-running or started rabbitmq-server)
stop on (shutdown or rabbitmq-server-stopped or stopping rabbitmq-server)

env WORKER=Workername
env COUNT=5

pre-start script
echo "[`date`] Workers started" >> /var/log/worker-$WORKER.log
end script

post-start script
for i in `seq 1 $COUNT`;
do
exec php /home/jiri/workers/dlapi.workers/workers/RpcWorkerLauncher.php $WORKER >/dev/null 2>&1 &
if [ $i = 1 ]; then
echo $! > /var/run/worker-$WORKER.pid
fi
done
end script

post-stop script
read -r PID < /var/run/worker-$WORKER.pid
for i in `seq 1 $COUNT`;
do
kill $(($PID + $i - 1))
done
rm /var/run/worker-$WORKER.pid
echo "[`date`] Workers stopped" >> /var/log/worker-$WORKER.log
end script
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]