Назад | Перейти на главную страницу

Почему сценарий мониторинга процесса использует выход 1; не нашел проблем?

Общий вопрос:

На сервере Linux (Centos), если сценарий мониторинга процесса, запускаемый cron, настроен на закрытие с помощью exit 1; скорее, чем exit 0; обнаружив, что все в порядке и никаких действий не требуется, это ошибка?

Или есть законные причины для звонка exit 1; вместо того exit 0; по условию «Все нормально, никаких действий не требуется»?

exit 0; на то, чтобы не найти проблем, мне кажется более подходящим. Но, возможно, я чего-то не знаю. Например, может быть, есть что-то специфическое для Cron? Или, может быть, в сценариях мониторинга процессов есть соглашение, что «сбой» означает «этому сценарию не удалось устранить проблему'(а не то, что я ожидал exit 1; будет означать 'наблюдаемый процесс не удался'?)


Мой конкретный случай:

Я смотрю на сценарий мониторинга процесса, написанный моей хостинговой компанией. Под сценарием мониторинга процесса я подразумеваю сценарий, который Cron выполняет на регулярной основе, который проверяет, запущен ли важный системный процесс, и, если он не запущен, выполняет такие действия, как отправка письма администратору или перезапуск процесса.

Вот (обобщенная) структура их сценария для службы, работающей на порту 8080 (в данном случае Apache Tomcat):

SERVICE=$(/usr/sbin/lsof -i tcp:8080 | wc -l);

if [ $SERVICE != 0 ]; then
exit 1;
else
#take action
fi

Кажется достаточно простым даже для такого человека с ограниченными знаниями, как я, за исключением exit 1; часть кажется странной. Как я понимаю, exit 0; закрывает программу и сообщает родителю, выполнившему программу, что все в порядке, exit n; где n> 0 и n <127 означает, что произошла какая-то ошибка или проблема.

Здесь их сценарий, похоже, противоречит этому правилу - он вызывает exit 1; в состоянии, когда все в порядке, и не выходит после принятия корректирующих действий в состоянии проблемы.

Мне это кажется ошибкой, но мой опыт в этой области ограничен. Бывают ли случаи, когда звонят exit 1; в условии «Все нормально, никаких действий» уместнее, чем вызов exit 0;? Или это ошибка?


Более широкий контекст довольно прост. Это Centos VPS под управлением Plesk. Скрипт вызывается Cron через Cron-менеджер Plesk «Запланированные задачи». Между Cron и этим скриптом нет настраиваемого уровня, который необычным образом реагировал бы на вызов выхода. Это довольно средний, почти готовый к использованию Centos VPS под управлением Plesk (если таковой существует). Этот сценарий отслеживает процесс Apache Tomcat.

Ваш общий анализ верен.

Это не звучит прямо «неправильно», но определенно является «хакерским» использованием семантики cron: обычно, если cron встречает скрипт с ошибкой, он отправляет письмо пользователю (или любому другому адресу, настроенному в crontab).

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