crontab 运行 python 代码没有将输出保存到文件

crontab running python code is not saving outputs to file

我在 Google Cloud 中启动了一个计算引擎实例,我在主目录中创建了一个名为“python”的文件夹,并在该目录中创建了一个名为“one.py”的文件夹。比我把这个粘贴到 one.py:

from datetime import datetime
import os
a=datetime.now()
file_to_open = os.path.join(os.getcwd(), "raw_data.txt")
with open(file_to_open, "a+") as file_object:
    file_object.seek(0)
    data = file_object.read(100)
    if len(data)>0:
        file_object.write("\n")
    file_object.write(str(a))
    file_object.close()

到目前为止,还不错。正在将日期保存到文件中。

比我把这个添加到 cronetab:

crontab -e

...
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
* * * * * python3 ~python/one.py

cron 作业正在运行,我在 运行

之后得到了这个输出
grep CRON /var/log/syslog


Mar 21 11:33:01 instance-2 CRON[605]: (myname) CMD (python3 ~/home/python/one.py)
Mar 21 11:33:01 instance-2 CRON[604]: (CRON) info (No MTA installed, discarding output)
Mar 21 11:34:01 instance-2 CRON[647]: (myname) CMD (python3 ~/home/python/one.py)
Mar 21 11:34:01 instance-2 CRON[646]: (CRON) info (No MTA installed, discarding output)

我认为这可能是因为根目录在不同的地方所以找到了。 raw_data.txt

只有一个,在~python/

有人可以帮我解决这个问题吗?为什么 cron 作业不将日期保存到文件中?

我的假设是它在错误的文件夹中查找 raw_data.txt,但由于找不到文件而失败。要查看脚本的完整信息,请为 cron 作业添加一个日志文件以将输出转储到其中。你可以这样说:* * * * * /use/bin/python3 /home/m/one.py >> /home/m/out.log。这会将执行的完整输出变为 out.log,并为您提供解决问题所需的所有信息。

在不了解更多情况下,我的假设是问题是由 os.getcwd() 引起的。这不会获取 one.py 的当前工作目录,而是获取执行 cron 的当前工作目录。由于您以 a+ 打开,文件必须首先存在才能附加到文件。您想要的是 os.path.dirname(os.path.realpath(__file__)),它将为您提供 one.py 的完整目录路径,而不管从何处调用脚本。将该行更改为:

file_to_open = os.path.join(os.path.dirname(os.path.realpath(__file__)), "raw_data.txt")