运行bash脚本(运行python脚本)的Cron作业与直接执行时的行为不同

时间:2014-10-24 11:56:42

标签: python bash csv cron

我有一个python脚本,可以创建一个csv并将其保存到:

file = example.csv
fileDone = os.path.abspath('/home/bw/temp/%s'%file1)

with open(fileDone, 'w+') as myFile:
    a = csv.writer(myFile, delimiter=',')
    a.writerow(['login report for %s from %s to %s:\n\n'%(name[0],start_date,end_date)])
    dato = ['Username','Logins','Platform']
    a.writerow(dato)
    for vizL in vizList:
        data =[str(vizL[0]),str(vizL[1]),"Viz"]
        a.writerow(data)
    for appL in appList:
        data =[str(appL[0]),str(appL[1]),"Analytics"]
        a.writerow(data)

然后bash脚本调用python脚本:

#!/bin/bash

python scriptname.py

REPORT_MONTH=`/bin/date "+%d %B %Y"`

echo -e "Attached is the login reports for $REPORT_MONTH\n\n\n\n\n\nGenerated by: $0" | mutt -a /home/bw/temp/example.csv -c my@email.com -s "Daily Login Reports For $REPORT_MONTH"

然后cron每天运行bash脚本。

当我手动运行bash脚本时,一切正常并且日期正确。但是当它由cron运行时,它似乎不会覆盖csv文件并只发送一个已经在/ temp文件夹中的文件。所以我假设它没有重新生成csv,因此没有运行python脚本。

这是我第一次设置cron作业来运行运行python脚本的bash脚本。任何有关为何发生这种情况的潜在见解都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

我会尝试两件事:

首先,尝试在bash脚本中设置python脚本的完整路径,如下所示:

#!/bin/bash
python /home/user/scripts/scriptname.py
REPORT_MONTH=`/bin/date "+%d %B %Y"`
echo -e "Attached is the login reports for $REPORT_MONTH\n\n\n\n\n\nGenerated by: $0" | mutt -a /home/bw/temp/example.csv -c my@email.com -s "Daily Login Reports For $REPORT_MONTH"

其次,如果以前没有工作,那么cron作业无权覆盖该文件可能会出现问题。哪个用户是cron运行? (它通常是根)。你能发布crontab -l的输出吗?如果删除文件并让cron创建它,它是否会被创建?

答案 1 :(得分:0)

首先,我要确保你的cron正在使用bash;默认情况下它使用sh。您可以包含SHELL = / bin / bash来更改它。