Я делал это несколько раз, чтобы поддерживать выполнение скрипта PHP и обеспечивать его повторный запуск при выходе.Более важно иметь возможность замедлить работу, если они начнут убегать с неперехваченными ошибками.В PHP 7+ перехват самого базового исключения (\Throwable
гарантирует, что все исключения, которые могут быть сгенерированы, будут перехвачены).
#!/bin/bash
nice php -q -f ./myfile.php -- $@
exec $0 $@
Все параметры, переданные в сценарий оболочки, передаются в PHPсценария, и когда файл PHP завершается, сценарий оболочки перезапускается сам (не рекурсивно, он заменяет себя) для повторного запуска.Внутри PHP-скрипта вы можете зацикливать сколько угодно, но поскольку перезапуск очень простой и быстрый, я мог бы сделать 50-100 циклов, прежде чем намеренно выйти, чтобы что-то очистить.сценарий с некоторыми опциями, с которыми я могу общаться exit $n;
:
#!/bin/bash
# a shell script that keeps looping until an exit code is given
# if it does an exit(0), restart after a second - or if it's a declared error
# if we've restarted in a planned fashion, we don't bother with any pause
# and for one particular code, exit the script entirely.
# The numbers 97, 98, 99 must match what is returned from the PHP script
nice php -q -f ./cli-beanstalk-worker.php -- $@
ERR=$?
## Possibilities
# 97 - planned pause/restart `exit 97;`
# 98 - planned restart (immediate, no sleep)
# 99 - planned stop, exit.
# 0 - unplanned restart (as returned by "exit;" or exceptions)
# - Anything else is also unplanned paused/restart
if [ $ERR -eq 97 ]
then
# a planned pause, then restart
echo "97: PLANNED_PAUSE - wait 2";
sleep 2;
exec $0 $@;
fi
# ... other choices to potentially pause, or exit the shell script
# unplanned exit, pause, and restart
echo "unplanned restart: err:" $ERR;
echo "sleeping for 5 secs"
sleep 5
# rerun this shell script, replacing itself
exec $0 $@