2017-02-27 70 views
1

我正在尝试在服务器上安装新的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请让我知道如果问题更适合该平台。

+0

更新:环境变量实际上是没有问题的。 Cron似乎在POSIX模式下运行。当'set + o posix'被添加到cron任务的开始时,proc成功运行。但仍需要一个更全面的解决方案... – datalie

回答

1

您需要exportbashrc您的变量为他们由Python过程可以看出:

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

pathadd PYTHONPATH ${BASEDIR}/lib 
export PYTHONPATH 
+0

对不起,但请完整阅读我的问题。我正在其他几台服务器上运行确切的cron任务,并且与其他服务器没有任何问题。我清楚地表明,我知道您提供的“解决方案”,但对此不感兴趣,因为使用我正在安装的软件构建未来的服务器不仅麻烦,而且服务器上运行了几个cron任务,所有这些任务都有不同与特定脚本相关的环境变量。 – datalie