Как мне сказать своему веб-серверу (Webfaction) просто запустить файл python и позволить ему работать вечно? Кто-то сказал мне, что я должен использовать cron
но я не нашел хорошего материала о том, как запустить его один раз и заставить его не останавливаться.
Насколько я понимаю, вы хотите, чтобы ваш процесс работал после закрытия ssh. Вы могли бы использовать screen
.
Самый простой способ - использовать что-то вроде nohup, чтобы сделать процесс демоном:
http://www.cyberciti.biz/tips/nohup-execute-commands-after-you-exit-from-a-shell-prompt.html
что вам нужно сделать:
nohup ./path_to_your_script.sh &
как только вы это сделаете, вы можете выйти из системы, закрыть терминал, что угодно, и ваш скрипт продолжит работу, пока сервер не будет перезапущен или вы не убьете процесс
Cron периодически запускается вечно. Задания Cron могут выполняться поминутно, час, ежедневно, еженедельно или ежемесячно. Вот обширная ссылка:
http://unixgeeks.org/security/newbie/unix/cron-1.html
Вот краткая справка:
Запуск на экране хорош для тестирования, но в какой-то момент он сломается по той или иной причине (WebFaction действительно любит убивать процессы, когда вы используете слишком много памяти), если тогда вам нужно будет перезапустить его автоматически.
Супервайзер (http://supervisord.org/ ) очень хорошо подходит для запуска и перезапуска, если по какой-либо причине они не работают. Он также обрабатывает «демонизирующие» процессы, которые он вызывает, когда вы отключаете процесс от текущего терминала, чтобы он продолжал работать после того, как вы закончите свой сезон (когда вы выйдете из SSH), можно написать код в вашем скрипте Python, чтобы сделать это самостоятельно, но зачем беспокоиться, когда есть классные инструменты, такие как Supervisord?
Конечно, всегда есть вероятность, что Супервизор умрет (или будет убит). Здесь вы можете использовать Cron. Cron позволяет вам периодически что-то запускать. Приятным свойством способа, которым обычно настраивается Supervisord, является то, что если вы попытаетесь запустить его, пока он уже запущен, он на самом деле не запустится во второй раз, поэтому если вы настроили задачу Cron для запуска Supervisord каждые 5 минут, тогда вы должно быть хорошо.
Лучшая практика для чего-то вроде этого:
1) Напишите сценарий таким образом, чтобы он сначала проверял наличие файла блокировки, чтобы убедиться, что другие копии уже не запущены, и / или убедитесь, что процесс еще не запущен.
2) Поместите запись в cron, чтобы запускать скрипт время от времени, скажем, раз в час.
3) Ваш скрипт может использовать цикл while (1), чтобы он работал "вечно". Однако лучше никогда не запускать скрипт вечно, так как у вас могут быть потенциальные утечки памяти, которые накапливаются в течение длительного времени и в конечном итоге приводят к подкачке вашей системы, и тогда у вас будет очень медленная система. Пусть он проработает многие тысячи итераций или убьет себя через определенное время. Cron запустит его снова в следующем временном интервале.
4) Зарегистрируйте свой вывод с помощью >> перенаправления в файл журнала, чтобы вы могли отслеживать любые сообщения, которые вы хотите вывести для статуса.