Использование 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 ?

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

  • Как использовать команду «screen», если я не знаю, из чего взялась программа ps или tty?
  • Оценка риска SSH PermitUserEnvironment с ForceCommand
  • Как сохранить процессы, выполняемые на удаленном сервере, даже после выключения терминальной машины?
  • Как подключиться к VPS без SSH.
  • Поиск информации по протоколу FISH
  • Что использовать для потоковой передачи любого звука на другой компьютер с использованием Wi-Fi
  • Можно ли загружать чрезвычайно большие файлы разумно или по частям через SSH от Linux до Windows?
  • SSH в Windows Server '08 с монетного двора 14 - «разрешение отклонено»
  • 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 - лучшая ОС в мире.