Python 无法在cron任务中设置环境变量
我正在尝试在服务器上安装新的cron任务。我可以通过命令行运行该进程,但不能通过cron运行它。这是因为在通过cron运行任务时,未正确设置PATH和PYTHONPATH的环境变量。(实际上,我在服务器上的所有cron作业中都遇到了这个问题,但为了简单起见,我只关注这个问题中的一个进程。) 以下是进程的cron条目:Python 无法在cron任务中设置环境变量,python,linux,cron,environment-variables,crontab,Python,Linux,Cron,Environment Variables,Crontab,我正在尝试在服务器上安装新的cron任务。我可以通过命令行运行该进程,但不能通过cron运行它。这是因为在通过cron运行任务时,未正确设置PATH和PYTHONPATH的环境变量。(实际上,我在服务器上的所有cron作业中都遇到了这个问题,但为了简单起见,我只关注这个问题中的一个进程。) 以下是进程的cron条目: ###procmon NLite### */2 * * * * . ~/.巴什尔委员会;cd/var/networkip/nlite/proc\u-mon。巴什尔委员会;cd-bi
###procmon NLite###
*/2 * * * * . ~/.巴什尔委员会;cd/var/networkip/nlite/proc\u-mon。巴什尔委员会;cd-bin/proc_mon.py>/dev/null 2>&1
现在,proc_mon目录中的bashrc包含:
BASEDIR=$PWD
KODIAK_ROOT=$BASEDIR/
BASEPATH=$KODIAK_ROOT
pathadd PYTHONPATH ${BASEDIR}/lib
因此,当cron任务运行时,应该重置PYTHONPATH,但这不会发生
还有其他几个较旧的服务器通过cron成功运行这些过程。迄今为止尝试的解决办法:
- 比较了从成功运行cron任务的服务器到未能运行cron的服务器的所有bashrc或bash_配置文件
- 记录环境变量以确认这是问题所在
- 设置环境变量的cron任务。有几个进程需要通过cron运行,并且相对于特定脚本,它们都有不同的PATH和PYTHONPATH变量。这样做可能会变得非常混乱,而且不是一个好的长期解决方案,因为我在未来的服务器上安装了相同的proc和cron李>
- 服务器故障的Linux发行版cron:CentOS 6.8版
- 用于cron成功的服务器的Linux发行版:Red Hat Enterprise Linux server 5.2版(Tikanga)
由于cron可以在其他服务器上工作,因此必须有一个合理的解决方案。我也是超级用户,因此mods请告诉我这个问题是否更适合该平台。您需要
导出bashrc
中的变量,以便python进程看到它们:
BASEDIR=$PWD
export KODIAK_ROOT=$BASEDIR/
export BASEPATH=$KODIAK_ROOT
pathadd PYTHONPATH ${BASEDIR}/lib
export PYTHONPATH
对不起,请仔细阅读我的问题。我正在其他几个服务器上运行cron任务,与其他服务器没有任何问题。我清楚地表示,我知道您提供的“解决方案”,但对它不感兴趣,因为它不仅对我正在安装的软件的未来服务器构建很麻烦,而且在服务器上运行多个cron任务,与特定脚本相关的所有环境变量都不同。更新:环境变量实际上不是问题所在。Cron似乎正在POSIX模式下运行。当set+o posix
添加到cron任务的开头时,该过程将成功运行。但仍然需要一个更全球化的解决方案。。。