Использование nohup для непрерывного выполнения сценария

Я очень новичок в Linux и я использую его только для SSH на моем веб-сервере, используя Putty . У меня проблема:

В основном у меня есть 2 php скрипта. Один get_tweets.php постоянно прослушивает твиты на twitters Streaming API а другой – parse_tweets.php записывает их в db . Чтобы они работали, они должны постоянно работать.

Я использую следующие команды для их запуска в фоновом режиме и из того, что я видел, они работают большую часть дня, однако, когда я входил на свой компьютер утром, scripts остановились, и я должен запустить команды снова.

nohup php my_script.php > /dev/null &

Мне просто интересно, нормально ли это на основе команд, которые я использую, должны ли они работать бесконечно при использовании nohup а если нет, то в чем альтернатива? Работа CRON ?

Спасибо за помощь

  • Какие команды использует git при общении через ssh?
  • Как установить программное обеспечение для нескольких клиентов linux
  • Можно ли выполнить команду через ssh с пользователем nologin?
  • Не удается восстановить со спящего tmux во время сеанса SSH
  • создать туннель на локальном сервере
  • SCP работает, но SSH не работает (по Wi-Fi)
  • Разрешить доступ к SSH после деления порта с любого источника IP
  • Проверьте, имеет ли секретный ключ SSH защиту паролем
  • 3 Solutions collect form web for “Использование nohup для непрерывного выполнения сценария”

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

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

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

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

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

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

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

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

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

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

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

    Если вы просто хотите убедиться, что ваш скрипт перезагрузится, когда он умрет, вы можете сделать что-то наподобие while true ; do php my_script.php ; done > /dev/null 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 минут или каждую неделю и т. Д.), Он не знает, как сохранить существующий процесс.

    Linux и Unix - лучшая ОС в мире.