我正在尝试在服务器上安装新的cron任务。我能够通过命令行运行该进程,但无法通过cron运行。这是由于PATH和PYTHONPATH的环境变量在通过cron运行任务时没有正确设置。 (其实我有这样的烦恼与服务器上的所有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
所以,在运行的cron任务时 - PYTHONPATH 应该复位,但这种情况并非如此。
还有几个其他的老服务器通过cron成功运行这些特效。
解决方案试图迄今:
- 相比,所有从的.bashrc或bash_profiles成功运行的cron任务的服务器无法运行crons
- 登录ENVIRON变量,以确认这是问题
我不感兴趣的解决方案:
- cron任务设置环境变量。有几个需要通过cron运行的proc,并且相对于该特定脚本,都有不同的PATH和PYTHONPATH变量。这样做可能会变得非常混乱,并且不是一个好的长期解决方案,因为我在未来的服务器上安装了相同的proc和cron。
进一步信息:
- Linux发行版的服务器失败的cron:CentOS版本6.8
- Linux发行版与cron的成功服务器:红帽企业Linux服务器版本5.2(Tikanga)
由于cron能够在其他服务器上工作,因此必须有合理的解决方案解决问题。我也在超级用户,所以MODS请让我知道如果问题更适合该平台。
更新:环境变量实际上是没有问题的。 Cron似乎在POSIX模式下运行。当'set + o posix'被添加到cron任务的开始时,proc成功运行。但仍需要一个更全面的解决方案... – datalie