Автоматически остановить php процесс запущенный дольше часа
Bash скрипт для завершения php процессов, которые зависли или не завершились. В данном случае мы их будем искать и завершать, если они длятся более одного часа.
Данный скрипт был взят на просторах Интернета, автора и источник вы можете посмотреть здесь:
Ссылка - https://stackoverflow.com/a/12765886
Создание файла и код скрипта
Создадим файл скрипта, с названием php_pkill.sh, через любой текстовый редактор и положим его например в /root/.
После дадим права на выполнение данного скрипта:
chmod +x /root/php_pkill.sh
Записываем в нашем файле код скрипта:
#!/bin/bash
for i in $(pidof php); do
pidtime=$(stat -c '%Y' /proc/$i)
now=$(date +%s)
((now - pidtime >= 3600)) && { kill $i; sleep 1; kill &>/dev/null -9 $i; }
done
Запуск скрипта по расписанию
Далее поставим наш скрипт на запуск по расписанию с помощью crontab. Редактируем или создаём файл crontab, и создаём следующую задачу:
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
#Check & kill php proc older then 1 hours
*/30 * * * * /root/php_pkill.sh
После редактирования сохраняем, можно также сразу вывести список задач с помощью команды crontab -l и убедиться что мы всё верно сохранили.
Таким образом наш скрипт будет запускаться каждые 30 минут. Проверять, есть ли среди запущенных php процессов, которые выполняются более одного часа и если такие есть, то выполнять команду “kill” для данных процессов, по их pid.