手动完成后,Python写入文件的工作正常,但是cron失败了

时间:2014-09-18 01:40:25

标签: python cron

我写了一个写入文本文件的python脚本,代码如下:

playercountlog = open("PMCcount.txt", "a")

playercountlog.write(time.strftime("%m/%d/%Y"));
playercountlog.write(" ");
playercountlog.write(time.strftime("%I:%M:%S"));
playercountlog.write(" ");
playercountlog.write(count);
playercountlog.write("\n")
playercountlog.close()

这个脚本在以root身份执行时运行正常(python program.py),但是当像这样添加到cron时:

* * * * * /user/bin/python /home/labtec901/program.py

没有任何内容写入文件。

我已经将程序和txt文件chmod到777只是为了确定,但没有区别。是什么给了什么?

3 个答案:

答案 0 :(得分:3)

cron作业有一个不同的工作目录。所以,无论是在其他地方写的还是失败的,因为那里没有权利。请改用绝对文件名。

答案 1 :(得分:0)

crontab中的行可能应该是:

* * * * * cd /home/labtec901 && /usr/bin/python /home/labtec901/program.py

这解决了两个问题:您的程序现在正在labtec901的主目录(而不是root目录中运行,如果它的crontab它的crontab is),Python的路径已经更正 - 从/user/bin/python/usr/bin/python

或者,如果你不想在crontab中使用cd命令,只需将put作为python程序的第一行:

import os
os.chdir('/home/labtec901')

OR ,您可以指定要打开的文件的绝对路径:

playercountlog = open("/home/labtec901/PMCcount.txt", "a")

答案 2 :(得分:0)

--user 是答案(对我而言)

我刚刚发现这篇文章,因为我遇到了完全相同的问题(多年后)。

我尝试了很多,例如建议的 os.chdir('...') 无效。

最终我将文件执行为: 0 * * * * python3 /home/me/folder/script.py --user 和 --user 帮我解决了问题。

注意,如果在执行脚本之前没有使用 cd /home/me/folder/ && python3 /home/me/folder/script.py --user,输出将直接写入主目录 me

附带说明:即使 python 脚本显示 with open('right_here.txt', 'a+') as file: [..] 也会发生这种情况,因此表明文件位于同一文件夹中。 CRON 对此有不同看法。