Я пытаюсь установить новую задачу cron на сервере. Я могу запустить процесс через командную строку, но не могу запустить его через cron. Это связано с тем, что переменные окружения для PATH и PYTHONPATH установлены неправильно, когда задача запускается через cron. (У меня действительно есть эта проблема со всеми заданиями cron на сервере, но для простоты я сфокусируюсь на одном процессе в этом вопросе.)

Вот запись cron для процесса:

### procmon NLite ### */2 * * * * . ~/.bashrc; cd /var/networkip/nlite/proc_mon; . bashrc; cd bin; ./proc_mon.py > /dev/null 2>&1

Теперь bashrc в каталоге proc_mon содержит:

BASEDIR=$PWD
KODIAK_ROOT=$BASEDIR/
BASEPATH=$KODIAK_ROOT

pathadd PYTHONPATH ${BASEDIR}/lib

Итак, когда выполняется crontask - PYTHONPATH должен быть сброшен, но этого не происходит.

Есть несколько других старых серверов, успешно работающих с этими процессами через cron.
Решения попытались до сих пор:

  • сравнил все bashrc или bash_profiles из успешно запущенной задачи cron с сервером, не запускающим cron
  • зарегистрированные переменные окружения, чтобы подтвердить, что это проблема

Решения, которые меня не интересуют:

  • Задача cron для установки переменных среды. Есть несколько процедур, которые должны запускаться через cron, и все они имеют разные переменные PATH и PYTHONPATH относительно этого конкретного сценария. Делать это может быть очень грязно и просто не является хорошим долгосрочным решением, так как я устанавливаю такие же процы и кроны на будущие серверы.

Дополнительная информация:

  • Linux дистрибутив для сервера, терпящего неудачу cron: CentOS выпуск 6.8
  • Linux дистрибутив для сервера с успехом cron: Red Hat Enterprise Linux Server выпуск 5.2 (Tikanga)

Поскольку crons может работать на других серверах, должно быть разумное решение проблемы.

1 ответ1

0

Как насчет изменения вашей командной строки /cronjob:

bash -c "PYTHONPATH=/var/networkip/nlite/proc_mon/lib:$PYTHONPATH python /var/networkip/nlite/proc_mon/proc_mon.py > /dev/null 2>&1"

Между RH5.2 и RH6.8 (не говоря уже о CentOS), есть довольно много различий (которые я хотел бы иметь источник прямо сейчас), в том числе я думаю, что изменение демона cron (с cron на cronie), Я думаю).

Независимо от этого, есть некоторые другие вещи, которые вы можете проверить:

  • проверьте, является ли seLinux частью изображения (grep для вашего пути в /var/log/audit/audit.log, если у вас есть такой файл, проверьте наличие AVC)
  • вызовите bash-скрипт из cron и настройте свою среду в этом скрипте (вместо длинного cron cli) - вы можете использовать для этого /etc/cron.d.
  • попробуйте запустить ваш скрипт с чистым env: env -i PYTHONPATH=/var/networkip/nlite/proc_mon/lib:$PYTHONPATH python /var/networkip/nlite/proc_mon/proc_mon.py > /dev/null 2>&1

Вы говорите, что это происходит для «всех заданий cron», поэтому я бы сначала проверил seLinux. Оставьте его включенным / принудительным, но используйте что-то вроде audit2allow чтобы исправить ваши конкретные проблемы.

Может также стоить удалить перенаправление вывода в /dev /null, чтобы вы могли увидеть, что может быть в действительности.

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