Как бесконечно запускать скрипт в фоновом режиме на Linux? - PullRequest
11 голосов
/ 23 марта 2010

У меня есть PHP-скрипт с бесконечным циклом.Мне нужен этот скрипт, работающий вечно.Итак, я запускаю

php /path/to/script.php > /dev/null &

И это работает в фоновом режиме в контексте безопасности моего текущего пользователя.Но когда я закрываю окно терминала (выход из системы), конечно, CentOS Linux убивает мою программу.

Я вижу две догадки: запустить от другого пользователя в фоновом режиме или сделать демон.Мне нужна помощь в каждой ситуации.

Большое спасибо!

Ответы [ 5 ]

24 голосов
/ 23 марта 2010

Ноухуп - твой друг.

nohup command &
6 голосов
/ 23 марта 2010

Я думаю, что общее решение для этого является nohup:

nohup - это команда POSIX, которая игнорирует сигнал HUP (зависание), позволяя команде продолжать работать после выхода пользователя, который выполнил команду. Сигнал HUP (зависания) по традиции является способом, которым терминал предупреждает в зависимости от процессов выхода из системы.

nohup чаще всего используется для запуска команд в фоновом режиме в качестве демонов. Вывод, который обычно идет в терминал, идет в файл с именем nohup.out, если он еще не был перенаправлен. Эта команда очень полезна, когда необходимо запустить множество пакетных заданий, которые взаимозависимы.

1 голос
/ 23 марта 2010

Вы могли бы:

  • Установить экран и запустить команду оттуда. screen - это постоянная терминальная сессия, которую вы можете оставить работающей.
  • Напишите скрипт init / upstart (что бы вы ни использовали), чтобы он загружался при загрузке
  • Используйте грушу lib system_daemon
  • Используйте cron, если пакетная работа лучше соответствует сценарию (просто не забудьте проверить запущенные экземпляры перед запуском другого, если параллелизм является проблемой)
  • Редактировать: или, как только что сказали все остальные и их брат, nohup
1 голос
/ 23 марта 2010

Ноухуп - твой друг.

0 голосов
/ 28 ноября 2016

Использование командыnohup your_command &Напримерnohup phantomjs highcharts-convert.js -host 127.0.0.1 -port 3003 &вот моя команда "phantomjs highcharts-convert.js -host 127.0.0.1 -port 3003"

...