
Я написал скрипт для мониторинга определенной службы на моем VPS. Эта служба (clamd.amavisd) имеет тенденцию неожиданно отключаться, и когда это происходит, моя служба электронной почты фактически останавливается.
Я использую следующую инструкцию в скрипте:
STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)
Проблема в том, что при запуске из терминала скрипт получает что-то в эту переменную (я сохранил это в файл, чтобы знать), но, к сожалению для меня, при запуске в задании cron переменная оказывается пустой.
Очевидно, что я делаю что-то не так. Есть ли какой-то фактор, который я не учитываю?
решение1
АБСОЛЮТНО все, что вы запускаете, cron
должно иметь абсолютные пути, поскольку cron
используется минимальная часть переменных окружения
STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)
На самом деле вы можете задать в своем скрипте самые важные пути, которые вам нужны.
PATH=/bin:/usr/local/sbin
но если вы не хотите в один прекрасный день обнаружить, что, например, ожидаемый файл ls
на самом деле является вредоносным хакерским дропом, то всегда используйте абсолютные пути
Укажите в начале вашего сценария, что вы готовы использовать что-то подобное.
CAT='/bin/cat'
LS='/bin/ls'
и использовать его как
$LS -la /some/path
$CAT /etc/passwd