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")
我在 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")