我有一个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脚本。任何有关为何发生这种情况的潜在见解都将受到高度赞赏。
答案 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来更改它。