Я пытаюсь установить новую задачу 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 может работать на других серверах, должно быть разумное решение проблемы.