Простейший бесконечный скрипт exec без выскочки
У меня есть пакет 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/wh независимо от ссылки на /etc/rc3.d/wh независимо и так далее Типичный способ не дает возможности возрождения. Я до сих пор не уверен в этом - кажется, так.
Учитывая эти ограничения, лучше и разумнее ли вставлять наш маленький скрипт в /etc/inittab с помощью респауна и идти?
1 ответ
Я бы демонизировал скрипт / процесс и управлял им с помощью Monit.
Это даст вам респаун и контроль над процессом, но также позволит вам запускать / проверять процесс с более коротким интервалом, чем cron (например, 15 секунд)