перезапуск скрипта python при ошибке
Как автоматически перезапустить скрипт Python, если он был убит или умер
Я запускаю свой сценарий Python в фоновом режиме на моем компьютере с Ubuntu (12.04) следующим образом:
Теперь может быть возможно, что на каком-то этапе мой выше Python script может умереть по любой причине.
Так что я думаю иметь какой-то cron agent скрипт в bash shell, который может автоматически перезапустить мой вышеописанный скрипт на Python, если он по какой-либо причине будет убит
Возможно ли это сделать? Если да, то как лучше всего решить эту проблему?
ОБНОВИТЬ:
Я запустил команду sudo, чтобы запустить ее, но я не вижу, как этот процесс выполняется с использованием ps ax?
Есть идеи, почему px axe мне ничего не показывает? И как я могу проверить, работает ли моя программа или нет?
В Ubuntu (до 14.04, 16.04 и позже используйте systemd) можно использовать upstart для этого лучше, чем задание cron. Вы вводите настройки конфигурации /etc/init и убедитесь, что вы задаете респаун
Это может быть минимальный файл /etc/init/testing.conf (отредактируйте как root ):
И вы можете проверить с /your/base/directory/testing.py :
и следите за тем, что происходит (в другом окне), с помощью:
Вы также можете добавить [start on][2] команду запуска при загрузке системы.
Вы также можете использовать более ориентированный на оболочку подход. Найдите свой cron сценарий и перезапустите его, если он умрет.
Добавьте эту строку в файл, который только что открылся
Сохраните файл и выйдите из редактора.
Вы можете заставить тестирующую программу перенаправить вывод, используя параметр командной строки, а затем использовать простой скрипт на python, чтобы перезапустить программу на неопределенный срок:
Вы можете поместить эту программу в фоновом режиме, и как только вы захотите остановить ее, просто вытяните ее на передний план и убейте ее.
Вы не должны действительно использовать это для производства, но вы могли бы:
Но вы можете посмотреть на альтернативы init и в коде Python для Pardus: в частности, mudur daemon.
Если вы решите пойти с заданием cron (и обработкой файла PID), подумайте о том, чтобы прочитать этот PEP 3143 и, возможно, использовать его эталонную реализацию.
Как я упоминал в других моих комментариях, надежная обработка PID-файлов является сложной задачей. Это склонно к гонкам и угловым случаям. Это становится сложнее, если есть какой-либо шанс, что ваш файл PID окажется в NFS или другой сетевой файловой системе (некоторая атомарность гарантирует, что вы получите с семантикой обработки файлов в надлежащих локальных файловых системах UNIX / Linux, которые исчезнут в некоторых версиях и реализациях NFS, например). Также семантика вокруг блокировки файлов в UNIX может быть сложной. (Быстро ли снимается блокировка flock или fcntl блокировка в вашей целевой ОС, например, когда процесс, удерживающий ее, уничтожается с помощью SIGKILL?).
Вы также можете использовать мониторинг Monit Or Process с помощью ps-watcher.
Вот пример для вашего сценария:
Моим решением этого было изменить
это означает, что полная работа crontab будет такой:
В моем случае, как быстрое исправление, я хотел, чтобы моя программа работала, когда она выходила с ошибкой en или она была убита. С другой стороны, я хотел остановить выполнение, когда программа завершилась правильно (код возврата = 0)
Я проверил это на Bash. Он должен нормально работать в любой другой оболочке
Автоматически перезапускать скрипт
Как контролировать постоянно работающий скрипт, чтобы при вылетах его перезапускать? Как вариант, можно даже перезапускать скрипт просто по времени, например, каждые 3 часа
Добавлено через 14 секунд
Подойдет решение со сторонним софтом
Скрипт не выполняется автоматически в Windows XP
Скрипт распространяется на машины в домене посредством GPO, на машинах с winXP политика применяется.
Скрипт PHP закоментировался в HTML автоматически
Редактирую адаптивный шаблон HTML CSS При попытке внедрить код внутри 14
Решение
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Нужен скрипт, который c правами админа в профилях пользователей автоматически собирает их email-ы
Здравствуйте. Нужен специальный скрипт. Работа скрипта должна проходить на форуме. Форум на движке.
Нужен ява-скрипт, который бы заставлял кнопку сабмит нажиматься автоматически через 3 сек.
Есть форма с кнопкой submit. Нужен ява-скрипт, который бы заставлял кнопку сабмит нажиматься.
Как не перезапускать программу?
Написал калькулятор, запустил, после одного вычисления приходиться перезапускать калькулятор, для.
Приходится перезапускать проводник
Всем привет. В общем проблема такая. После запуска компа он перестает реагировать на команды мышки.
Создайте скрипт, который бы автоматически выводил дату создания файла определенного формата. Для jpeg файлов, независимо
Создайте скрипт, который бы автоматически выводил дату создания файла определенного формата. Для.
В Python, как мне перезапустить функцию, если она выдает ошибку
Ниже приведены фрагменты моих кодов, которые я хотел бы знать гипотетически, если функция main2 () по какой-то причине выдает ошибку, как я могу получить свое исключение для повторного запуска той же функции, скажем, 3 раза, прежде чем она сломается?
Просто добавьте, что любая из функций может выдавать ошибку (не только main2 ()), также у меня может быть не только 3, но и много других функций.
4 ответа
Это будет работать так же, как если бы вы написали:
Если вы хотите сделать его надежным и чистым, вам следует выбрать первое решение. Первое решение, которое вы можете повторно использовать в крупном корпоративном проекте, и из-за времени отсрочки может потребоваться нагрузка на диск, пользовательские проблемы с загрузкой сети учитывают время отката / задержки.
Если вы не используете задержку, вы сделаете все 3 попытки всего за секунду. Это хорошо для некоторых исключений, но когда возникают проблемы с сетью или диском, вам нужно более сложное решение.
Кроме того, учтите, что не нужно перехватывать все исключения, это плохая практика для кэширования всех. Подробнее о том, почему это плохо
Вы должны обрабатывать все ошибки в определенных функциях, иначе, если обрабатывать ошибки всех функций вместе, функция, предшествующая другим функциям, выдаст ошибку, и элемент управления выполнит блок исключений, пропуская оставшуюся часть кода ниже в блоке try. Попробуй сам:
Попробуйте комментировать поднятые ошибки в функциях в другом порядке. И когда ошибки обрабатываются внутри каждой функции, то каждая функция выполняется без пропуска оставшихся функций в цикле.
Этот код будет запускать функцию main2() до тех пор, пока не получит 3 ошибки, а в первые 2 он снова запустит цикл.
Вот идиома, которую вы можете попробовать:
Как сделать программу Python автоматически перезапустить себя
Как сделать так, чтобы программа на python автоматически перезапускала себя? Итак, скажем, есть действительно простая программа, такая как:
Теперь в оболочке Python вам нужно будет нажать либо кнопку «Выполнить», а затем «Запуск модуля (F5)», либо просто кнопку «f5» на клавиатуре. Это первый раз, когда вы запускаете его. Когда программа закончилась, вы вернетесь к своему файлу «Cheese.py» и затем нажмите «f5», чтобы снова запустить программу. Все со мной здесь? Итак, мой вопрос: как заставить программу автоматически перезагружаться без необходимости делать это вручную?
4 ответа
Если вы хотите фактически перезапустить сценарий, вы можете выполнить сценарий снова, заменив текущий процесс новым, выполнив следующие действия:
Это будет постоянно перезапускать скрипт, предоставляя аргументы командной строки от текущей версии к новой версии. Более подробное обсуждение этого метода можно найти в посте «Перезапуск скрипта Python внутри себя »от Петр Земек.
эта статья отмечает один элемент является:
Или вы можете попробовать
Затем вы можете запустить скрипт через
В такой ситуации, чтобы перезапустить скрипт, используйте следующий код:
В противном случае, когда вы запускаете скрипт через
Используйте этот код:
В любом случае, не забудьте импортировать sys module
Я использую терминал на своем Mac, чтобы перезапустить некоторые из моих скриптов на Python с помощью функции ниже.
Примечание: не забывайте пробел после «профиля»; или функция может молча сбоить!
Затем в нижней части моего сценария нужно перезапустить:
Исходный вопрос о сценарии с сыром:
Перезапускать скрипт python после ошибки arcpy до успешного завершения
Я использую модуль arcpy в ArcGIS в Python (2.7) для обработки многих шейп-файлов полигонов, используя множество различных инструментов. Время от времени он генерирует случайную ошибку, которую я ловлю за исключением, но на все последующие шейп-файлы влияет та же ошибка. Я действительно не понимаю, что является причиной этой ошибки (ОШИБКА 010088), и единственный обходной путь, который я имею, состоит в том, чтобы перезапустить сценарий из последнего файла, который был успешно обработан.
У меня вопрос: как я могу перезапускать скрипт каждый раз, когда сталкиваюсь с этой ошибкой, а затем останавливаться, когда все файлы были успешно обработаны?
Скрипт называется test.py:
Скрипт называется forever.py, в том же каталоге:
Я на Windows-машине, поэтому я запускаю все это в командной строке с помощью:
Как и ожидалось, первый раз этот скрипт запускается без ошибок, а после этого он обнаруживает ошибку, поскольку выходной файл уже существует (ОШИБКА 000725). Проблема в том, что в конечном итоге я хочу, чтобы скрипт только перезапускался, когда он сталкивался с ошибкой 010088, и определенно не после успешного завершения скрипта. Таким образом, в этом примере он вообще не должен перезапускаться, потому что сценарий должен быть успешным при первом запуске. Я заранее знаю, сколько файлов нужно обработать, поэтому я знаю, что сценарий успешно завершился, когда достиг последнего.