Bash, чтобы запустить и убить процесс в Ubuntu в указанный период - PullRequest
0 голосов
/ 06 сентября 2018

У меня такая ситуация: у меня есть скрипт на php, работающий на терминале ubuntu (xfce4-терминал) в качестве консоли / процесса (в php есть цикл с каким-то процессом). Проблема в том, что каждые два дня этот процесс прерывается из-за чрезмерного использования памяти. Что мне нужно, так это: bash-скрипт, который может запустить процесс, и каждые 48 часов он убивает этот процесс и запускает его снова.

1 Ответ

0 голосов
/ 06 сентября 2018

Оптимальным решением является устранение утечки памяти, отслеживание функции утечки и отправка нового вопроса с соответствующим кодом, если вам нужна помощь.

Теперь для этого конкретного случая вы можете использовать что-то вроде этого:

while true
do 
  timeout 12h php myfile.php
done

Это бесконечный цикл, который запускает вашу команду и убивает ее каждые 12 часов. (или любая другая продолжительность, которую вы хотите: 30м, 1д и т. д.)

Более стабильным решением является создание службы systemd или развертывание вашего сценария с помощью какого-либо диспетчера процессов, например Supervisor или Monit.

В Supervisor есть параметр конфигурации "autorestart", если вы укажете true, он перезапускает ваш скрипт каждый раз, когда происходит сбой, и это стабильное решение, готовое к работе.

Пример конфигурации супервизора из этого поста

[program:are_we_there_yet]
command=php /var/www/areWeThereYet.php
numprocs=1
directory=/tmp
autostart=true
autorestart=true
startsecs=5
startretries=10
redirect_stderr=false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...