Я написал скрипт для мониторинга конкретной службы на моем VPS. Эта служба (clamd.amavisd) имеет тенденцию быть неожиданно найденной мертвой, и когда это происходит, моя служба электронной почты по существу останавливается.

Я использую следующую инструкцию в сценарии:

STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)

Проблема в том, что при запуске из терминала скрипт получает что-то в этой переменной (я перевел это в файл, чтобы я знал), но, к сожалению, для меня, когда он запускается в задании cron, переменная пуста.

Очевидно, что я делаю что-то не так. Есть ли какой-то фактор, который я не принимаю во внимание?

1 ответ1

1

АБСОЛЮТНО все, что вы запускаете из cron должно иметь абсолютные пути, потому что cron использует минимальную часть переменных окружения

   STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)

Вы можете установить в своем скрипте наиболее важные PATH, которые вам нужны, как

   PATH=/bin:/usr/local/sbin 

но если однажды вы обнаружите, что, например, ожидаемый ls на самом деле является отбрасыванием злонамеренного хакера, используйте всегда абсолютные пути

В начале вашего сценария укажите, что вы хотите использовать что-то подобное

   CAT='/bin/cat'
   LS='/bin/ls'

и использовать его как

  $LS -la /some/path
  $CAT /etc/passwd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .