Используя nohup для поддерживания сценария в рабочем состоянии неограниченно долго

Возможно, это, считайте информацию с proc фс и используйте до н.э для вычисления:

#!/bin/bash
tot=$(awk '{ if (/MemTotal:/) {print $2} }' </proc/meminfo)
free=$(awk '{ if (/MemFree:/) {print $2} }' </proc/meminfo)
pers=$(echo "scale=0; 100 - 100 * $free / $tot" | bc)
echo '{"Memory":"'$pers'"}'
7
10.09.2014, 11:00
3 ответа

Если вы просто хотите убедиться, что ваш скрипт перезапустится после смерти, вы можете сделать что-то вроде while true ; do php my_script.php ; done > /dev/null

Это будет ждать окончания работы my_script.php, а затем запустить его снова. Все результаты будут отправлены в /dev/null

Если вы хотите использовать nohup, то вы должны сделать следующее

$ echo 'while true ; do php my_script.php ; done > /dev/null' > ~/php_run_loop.sh
$ chmod a+x ~/php_run_loop.sh
$ nohup ~/php_run_loop.sh

ПРИМЕЧАНИЕ: Если у вас есть ошибка или другая проблема в вашем php-скрипте, это приведет к тому, что он будет повторяться снова и снова без ограничений. Это не изящное решение, но это решение.

BTW, cron хорош для запуска короткоживущего процесса по расписанию (каждые 5 минут, или каждую неделю, и т.д.), он не знает, как поддерживать существующий процесс в рабочем состоянии.

0
27.01.2020, 20:16

С nohup вы должны также перенаправлять ошибки. Следующая команда запускает скрипт с выводом и ошибками, перенаправляющими на / dev / null:

nohup php my_script.php >/dev/null 2>&1 &

Но ваш скрипт может быть прерван по другим причинам (ошибка в скрипте, oom-killer и т. Д.). Итак, вы должны демонизировать его с помощью системного init (если он поддерживает автоматический перезапуск - выскочка, systemd и некоторые другие могут это сделать). Или вы должны написать задачу cron для проверки и перезапустить скрипт, если он не запускается.

9
27.01.2020, 20:16

Возможно, вы захотите посмотреть, что происходит, а не перенаправить вывод на /dev/null.

Предлагаю открыть экран или tmux. Оба они являются терминальными мультиплексорами , которые останутся в живых, даже если Вы выйдете из системы.

Например, (...) для получения информации

$ screen
$(inside screen-t1): ./get_tweets.php
.... running first

Теперь нажмите Ctrl-a c, чтобы открыть новый терминал.

 $(inside screen-t2): ./parse_tweets.php
 ... running second

Ctrl-a d позволяет отсоединить сессию. При повторном входе в систему используйте экран -r

Примечание: Вы можете отобразить на экране строку состояния для визуализации различных окон.

4
27.01.2020, 20:16

Теги

Похожие вопросы