Как автоматически перезапускать программу на python

У вас есть скрипт, с помощью которого вы получаете данные каждый день. Например из API яндекс директ или google analytics. Вы хотите автоматизировать это действие, вам надоело вручную каждый день запускать скрипт. Для этого в linux есть планировщик задач cron.

Cron — это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные директории.

Для того, чтобы отредактировать файл crontab нужно ввести в консоль команду

Источник: toolmark.ru

Как автоматически перезапустить скрипт Python, если он был убит или умер

Я запускаю свой сценарий Python в фоновом режиме на моем компьютере с Ubuntu (12.04) следующим образом:

Как сделать автозапуск программ на Python по расписанию


nohup python testing.py > test.out Hello World» time.sleep(5)

В Ubuntu (до 14.04, 16.04 и позже используйте systemd) можно использовать upstart для этого лучше, чем задание cron. Вы вводите настройки конфигурации /etc/init и убедитесь, что вы задаете респаун

Это может быть минимальный файл /etc/init/testing.conf (отредактируйте как root ):

chdir /your/base/directory exec python testing.py respawn

И вы можете проверить с /your/base/directory/testing.py :

from __future__ import print_function import time with open(‘/var/tmp/testing.log’, ‘a’) as fp: print(time.time(), ‘done’, file=fp) time.sleep(3)
sudo start testing

и следите за тем, что происходит (в другом окне), с помощью:

tail -f /var/tmp/testing.log

и остановитесь на:

sudo stop testing

Вы также можете добавить [start on][2] команду запуска при загрузке системы.

Если вы используете задание cron, вам нужно либо внедрить, либо найти какой-то код для надежной обработки PID-файлов. Вы хотите, чтобы ваша служба / script / daemon создала PID-файл (условно расположенный в / var / run) и чтобы его стартовый код проверял, не устарело ли содержимое файла (оставленное уничтоженным процессом). Этот вид кода на удивление трудно написать без рас и угловых случаев. stackoverflow.com/questions/788411/…

Читайте также:
Интересные программы в браузере

Спасибо, Зельда. Благодарим Вас за помощь. Я обновил вопрос с некоторыми деталями. Я пытаюсь сделать так, чтобы увидеть, запущен ли мой testing.py или нет .. Он не показывает мне, работает он или нет .. px ax | grep testing.py .. Он мне ничего не возвращает? Есть идеи почему?

Вы должны поместить все это в предложение try / исключением и записать в файл журнала, какое исключение было сгенерировано и что программа закрывается. Возможно, оператор print не работает, так как не может записать в stdout.

Вы также можете использовать более ориентированный на оболочку подход. Найдите свой cron сценарий и перезапустите его, если он умрет.

Автозапуск программ на python

  1. Создайте новый crontab, запустив crontab -e . Откроется окно вашего любимого текстового редактора.
  2. Добавьте эту строку в файл, который только что открылся

*/5 * * * * pgrep -f testing.py || nohup python /home/you/scripts/testing.py > test.out

Вы только что создали новый, crontab который будет запускаться каждые 5 минут и запускать ваш скрипт, если он еще не запущен. Смотрите здесь для милого небольшого урока cron . Официальные документы по Ubuntu cron находятся здесь .

Фактическая команда, pgrep которая выполняется, выполняет поиск запущенных процессов для строки, заданной в командной строке. pgrep foo будет искать названную программу foo и вернуть ее идентификатор процесса . pgrep -f позволяет выполнять поиск по всей командной строке, используемой для запуска программы, а не только по имени программы (полезно, потому что это скрипт на python).

В || означает символ «это сделать , если предыдущая команда не удалось». Итак, если ваш скрипт не запущен, pgrep произойдет сбой, поскольку он ничего не найдет и ваш скрипт будет запущен.

Читайте также:
Как заблокировать программу в телефоне Андроид

Спасибо .. Но я новичок в Linux и Unix, так что не знаете, где находится crontab? Это файл в моей машине с Ubuntu?

Спасибо Terdon .. Я могу запустить эту команду crontab -e из каталога, где мой скрипт Python .. Правильно?

Спасибо. Теперь это имеет смысл . Я только что создал новый crontab и отредактировал файл, добавив одну и ту же строку, но в течение 1 минуты . Я уже создал скрипт Hello World Python, вращающийся вокруг, в то время как True назван test.py .. После сохранения файл crontab, он должен автоматически запускать testing.py через 1 минуту? И затем продолжайте проверять каждую минуту, работает ли скрипт Python или нет? Если да, после сохранения файла crontab -e я сделал ps ax | grep testing.py и я не могу увидеть какой-либо процесс для этого?

Вы можете заставить тестирующую программу перенаправить вывод, используя параметр командной строки, а затем использовать простой скрипт на python, чтобы перезапустить программу на неопределенный срок:

import subprocess while True: try: print subprocess.check_output([‘python’, ‘testing.py’]) except KeyboardInterrupt: break

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

Вы не должны действительно использовать это для производства, но вы могли бы:

#!/bin/sh while true; do nohup python testing.py >> test.out done респавна» в / etc / inittab . если вы используете старую систему инициализации SysV. Другой метод — использовать демон supervisor из пакета daemontools DJ Bernstein . Другие варианты — использовать функции в Ubuntu Upstart . или Systemd или других.

Но вы можете посмотреть на альтернативы init и в коде Python для Pardus: в частности, mudur daemon.

Если вы решите пойти с заданием cron (и обработкой файла PID), подумайте о том, чтобы прочитать этот PEP 3143 и, возможно, использовать его эталонную реализацию.

Читайте также:
Как обновить программу 1с предприятие

Как я упоминал в других моих комментариях, надежная обработка PID-файлов является сложной задачей. Это склонно к гонкам и угловым случаям. Это становится сложнее, если есть какой-либо шанс, что ваш файл PID окажется в NFS или другой сетевой файловой системе (некоторая атомарность гарантирует, что вы получите с семантикой обработки файлов в надлежащих локальных файловых системах UNIX / Linux, которые исчезнут в некоторых версиях и реализациях NFS, например). Также семантика вокруг блокировки файлов в UNIX может быть сложной. (Быстро ли снимается блокировка flock или fcntl блокировка в вашей целевой ОС, например, когда процесс, удерживающий ее, уничтожается с помощью SIGKILL?).

Вы также можете использовать мониторинг Monit Or Process с помощью ps-watcher.

Monit — это утилита с открытым исходным кодом для управления и мониторинга процессов, программ, файлов, каталогов и файловых систем в системе UNIX. Монит проводит автоматическое обслуживание и ремонт и может выполнять значимые причинно-следственные действия в ситуациях ошибки.

Вот пример для вашего сценария:

check process myprocessname matching «myprocessname» start program = «nohup /usr/bin/python /path/testing.py > /tmp/test.out stop program = «/usr/bin/killall myprocessname»

Источник: qastack.ru

Русские Блоги

Используйте скрипт оболочки для управления Python для автоматического перезапуска

Нам часто нужно запускать несколько сценариев Python в фоновом режиме, чтобы контролировать систему или сделать что-то еще; но из-за различных проблем, это не код сценария Python; сценарий будет его повесить. Ручной перезапуск нереально, и ожидается, что он будет перезапущен выше каждый день. Отказ Отказ

Таким образом, мы написали сценарий Shell для управления автоматическим перезапуском после того, как Python Hang:

Сценарий оболочки выглядит следующим образом: очень просто:

Затем мы используем сценарий Shell для запуска программы Python: после запуска: давайте тестируем:

Убейте процесс Python на заднем плане -9; см. Сценарий Python автоматически перезапускается.

Источник: russianblogs.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru