LINUX.ORG.RU
ФорумTalks

keep alive python


0

0
Итак, есть питоновский скрипт, задача котороно непрерывно выполняться. Периодически, в силу ряда обстоятельств, он завершает свою работу. Нужен инструмент, который после этого будет автоматически перезапускать скрипт. Следить за тем, чтобы одновременно не выполнялось 2 и более копий скрипта, обязательно. Как и чем это лучше сделать?
дописать это в сам скрипт +крон?
dreamer ★★★★★
()
обернуть shell скриптом с бесконечным while и проверкой pid файла
дарю начало

while true
do
  sleep $sleep_period

  if [ "`ps -p $exe_pid -o pid=`" == "" ]; then

hizel ★★★★★
()
Ответ на: комментарий от hizel
> обернуть shell скриптом с бесконечным while и проверкой pid файла

А зачем там проверка pid и sleep? Выполнение цикла ведь продолжится только в том случае, если скрипт терминируется.

narayan
()
> Периодически, в силу ряда обстоятельств, он завершает свою работу.

Мне кажется тут правильнее всего изменить именно это.
init ★★★★★
()
>Нужен инструмент, который после этого будет автоматически перезапускать скрипт

Есть такой башенный самописный скрипт. Может перезапускать, останавливать, отключать, проверять состояние, запущенных процессов. В продуктиве несколько лет. Но на работе, откуда я свалил за 3 минуты до твоего поста.:)

DonkeyHot ★★★★★
()
Ответ на: комментарий от val-amart
>завернуть его try: except SysExit:

Там часто память утекает, т.ч. может не сработать.

DonkeyHot ★★★★★
()
Ответ на: комментарий от init
Нет, не правильнее.

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

Сам скрипт я держал живьем на тестовом железе. Он себе вполне нормально работает. Но вот однажды утром я увидел, что он загнулся. Почему - хз. После перезапуска он продолжил спокойно работать не один день.
VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от hizel
нет :)
скрипт слушает компорт и рисует на экране картинки.
VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от DonkeyHot
нужно что-то простое и надежное - мне чтоб гвозди забивать микроскоп не нужен :)

хотя посмотреть было бы очень интересно.
VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от DonkeyHot
через inittab я сделал запуск иксов, в которых должен выполняться скрипт. после вылета иксы гарантированно перезапускаются. но это не решает проблему вылета скрипта внутри иксов.
VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от VladimirMalyk
ну так повесь скрипт в стартап иксов. что там у тебя за окружение?
если ничего, кроме скрипта не нужно, можешь просто сделать
echo "/path/to/script" > ~/.xinitrc
завершится программа - завершатся иксы.
val-amart ★★★★★
()
Ответ на: комментарий от val-amart
скрипт в автозагрузке xfce4 - кое-какая среда все же нужна. считается что заказчик должен иметь возможность обслуживать ПО - а заставлять их монтировать флешку в консоли есть тонкий изврат. не знаю, правда, на сколько это понадобится в действительности. вполне может быть что от этого откажусь - тогда вариант со стартапом иксов будет очень кстати.
VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от VladimirMalyk
заметь, это не я, это ты предложил такое кривое решение.
самый правильный вариант - обернуть скрипт в обработчик ексепшенов, и попутно пофиксить баги, приводящие к его краху. в продакшн такое все равно не годится. менее прямой, но возможный вариант в стиле "на коленке" - скрипт-обертка, с вечным циклом, как тут писали ранее.
val-amart ★★★★★
()
Ответ на: комментарий от val-amart
какое из предложенных решений тебе кажется кривым?
вариант с оборачиванием скрипта в обработчик ексепшенов дело конечно нужное, но не обязательное, потому как нет и не может быть в принципе гарантии того, что удастся найти и исправить все ошибки - keep alive скрипт все равно нужно делать.

связка, в которой за жизнью питон-скрипа следит скрипт-обертка, за жизнью иксов следит inittab, за жизнью оси следит watchdog - только такая круговая порука успокоит меня больше чем кропотливое тестирование и тщательное устранение багов.
VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от VladimirMalyk
> какое из предложенных решений тебе кажется кривым?
пускание скрипта из .xinitrc

> вариант с оборачиванием скрипта в обработчик ексепшенов дело конечно нужное, но не обязательное, потому как нет и не может быть в принципе гарантии того, что удастся найти и исправить все ошибки - keep alive скрипт все равно нужно делать.

почему-это нет? кто тебе мешает из обработчика ошибок перезапускать main функцию?
val-amart ★★★★★
()
Ответ на: комментарий от val-amart
>> какое из предложенных решений тебе кажется кривым?
> пускание скрипта из .xinitrc


почему? очень интересное решение. тут речь идет не столько о надежности, сколько об избавлении от не нужной среды (xfce4 в данном случае). кроме того, пускать скрипт все равно нужно будет через скрипт-обертку.
VladimirMalyk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.