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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.