环境变量无法在cron任务中设置

时间:2017-02-27 23:23:25

标签: python linux cron environment-variables crontab

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

以下是该流程的cron条目:

### procmon NLite ### */2 * * * * . ~/.bashrc; cd /var/networkip/nlite/proc_mon; . bashrc; 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任务的所有bashrc或bash_profiles与无法运行crons的服务器进行比较
  • 记录环境变量以确认这是问题

我不感兴趣的解决方案:

  • 设置环境变量的cron任务。有几个proc需要通过cron运行,并且相对于特定脚本都有不同的PATH和PYTHONPATH变量。这样做可能会非常混乱,因为我在未来的服务器上安装相同的proc和crons,这不是一个好的长期解决方案。

更多信息:

  • 服务器发生故障的Linux发行版cron:CentOS版本6.8
  • cron成功服务器的Linux发行版:红帽企业Linux服务器版本5.2(Tikanga)

由于crons能够在其他服务器上运行,因此必须有一个合理的解决方案。我也是超级用户,所以如果问题更适合该平台,请告诉我。

1 个答案:

答案 0 :(得分:1)

您需要在exportbashrc变量才能让python进程看到它们:

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

pathadd PYTHONPATH ${BASEDIR}/lib
export PYTHONPATH