У меня есть коробка CentOS 5.11, с которой мне нужно работать сейчас - в производственной среде, где я действительно не могу перенести ее на CentOS 6, по крайней мере, некоторое время. Я не должен влиять на этот проект, я не могу испортить эту производственную коробку.
У меня есть сценарий, назовите его / my / foo. Прямо сейчас этот скрипт запускается из cron каждые 3 минуты - на самом деле он работает как:
* / 3 * * * * / my / foo myparam
Проблема в том, что сценарий обычно запускается всего несколько секунд, а затем мы тратим почти 3 минуты на ожидание. Но у нас может быть ТОЛЬКО один запущенный экземпляр (так что на самом деле у нас уже есть уязвимость, если аномалия вызывает запуск более 3 минут). Иногда у сценария может быть много дел, и он может занять 2 минуты, поэтому мы установили его на 3 или около того.
На самом деле мы стремимся просто гарантировать, что один и только один экземпляр этого скрипта будет работать «бесконечно» (цикл), и, скорее всего, мы вставим туда «сон 30», чтобы он не быть слишком агрессивным. Сам сценарий не является циклом - это однопроходный сценарий. Но мы определенно тратим много времени в 99% случаев, запуская его только каждые 3 минуты из cron. 1% случаев, когда это занимает> 2 минут, означает, что мы тратим 99% случаев на ожидание, когда он снова сможет работать и выполнить больше работы.
Итак, мы полагаем, что на данный момент неплохо было бы поместить его в систему инициализации с респауном. Там он запускается, завершается, возрождается (возможно, с этим небольшим сном в самом скрипте). Навсегда. Это устойчиво (случайное уничтожение процесса не означает, что он мертв навсегда и т. Д.).
Я видел много сообщений о выскочке, даже некоторые дискуссии о его будущем в CentOS 6 и так далее. Но опять же, я должен вставить это в этот ящик CentOS 5 на данный момент - у нас нет выскочки и не скоро. Я должен надеть это на эту производственную коробку с тем, что у меня есть ... и ничего не сломать.
Я видел / etc / inittab как бы poo poo'd, но также было отмечено, что это лучший способ получить возрождение - это /etc/init.d/whatever, ссылаясь на /etc/rc3.d/whatever и т. Д. on, как правило, не дает возможности возрождения. Я все еще не уверен в этом - кажется, так.
Учитывая эти ограничения, лучше и разумнее всего поместить наш маленький скрипт в сам / etc / inittab с помощью команды respawn and go?
Я бы демонизировал скрипт / процесс и управлял им с помощью Монит.
Это даст вам возможность возрождения и управления процессом, но также позволит запускать / проверять процесс с более коротким интервалом, чем cron (например, 15 секунд).