2017-10-13 183 views
0

我有一个shell脚本cron从同一个目录调用python脚本,但是当这个cron正在执行时,我没有从我的python脚本得到预期的输出,当我手动执行它时,我的python脚本的输出如预期的那样。从shell脚本调用python脚本cron

我已经提供了Python脚本路径像 在/ usr/bin中/ Python的room_wise.py

,并给出了shell脚本的所有外壳PARAMS以及但是我的Python脚本没有使用shell脚本的cron调用。

任何人都可以帮助我吗?

+1

你有没有试过'/ usr/bin/python/path/to/room_wise.py'? – Nepho

+0

是的@Nepho,我已经尝试了这两个东西, – Sid

+0

是否按预期方式输出了'which/python'/usr/bin/python'? – Nepho

回答

0

cron作业中的大问题是绝对目录位置和相对目录位置。您需要首先将相对路径分开,如图所示。

#!/usr/bin/env bash 
dirName=`dirname $0` 
baseName=`basename $0` 
arg1=$1 
arg2=$2 
cd ${dirName} && python ./room_wise.py arg1 arg2 

然后用crontab -e将项目添加到您的用户cron作业和添加以下内容:

PATH=/usr/bin:/bin:/sbin 
30 00 * * * /my/directory/containing/room_wise_py.sh arg1 arg2 > /my/directory/containing/output.log 2>&1 

你可以看到,我已经添加了路径,因为有时这可能是一个问题某些操作系统分配。此外,该脚本与bash脚本存在于相同的目录中,或者如果修改bash脚本以将$ dirname包含为$ 1,则可以将目录位置作为参数传递。

此外,您可以看到我已将所有输出定向到日志文件。这是一个非常好的主意,因为如果出现问题,调试过程有时非常困难。

+0

如果你还没有这样做,记得在你的python脚本的开头添加#!/ usr/bin/env python。从cron中的bash脚本执行软件时,这也是一个很重要的方面。 –

+0

管线末端的'2>&1'线做了什么? –