Python 无法在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

我正在尝试在服务器上安装新的cron任务。我可以通过命令行运行该进程,但不能通过cron运行它。这是因为在通过cron运行任务时,未正确设置PATH和PYTHONPATH的环境变量。(实际上,我在服务器上的所有cron作业中都遇到了这个问题,但为了简单起见,我只关注这个问题中的一个进程。)

以下是进程的cron条目:

###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任务的开头时,该过程将成功运行。但仍然需要一个更全球化的解决方案。。。