【发布时间】:2019-01-26 03:20:58
【问题描述】:
我已经安排我的 Python 脚本每小时执行一次,方法是在 shell 中键入 crontab -e,然后将这行文本添加到 cron 文件中:
0 * * * * /usr/bin/python /home/myUserName/automatedProject/test.py &>> /home/myUserName/automatedProject/log.txt
但无论我尝试什么变体,它都不会执行。
作为测试脚本,我使用 Jessica Yung 的 simple script 将时间戳附加到文件中:
#! /usr/bin/env python
import time
filename = "record_time.txt"
current_time = time.strftime('%a %H:%M:%S')
with open(filename, 'a') as handle:
handle.write(str(current_time))
handle.write('\n')
【问题讨论】:
-
Cron 不以
your username运行。因此,不要尝试根据您的主目录访问文件文件。 cron 日志文件因 Linux 发行版而异:在/var/log/syslog中查找 cron 错误。这也可能对您有所帮助:askubuntu.com/questions/418237/how-to-detect-error-in-cron-jobs -
嗨@JohnHanley,我已将所有内容移至
/opt/*,但Google Compute Engine VM 仍不执行我的cron 作业,即使我将cron 时间/日期选项设置为@987654329 @(所有 5 个选项为“任何”) -
日志文件向您展示了什么?
-
cron确实在您的用户 ID 下运行 crontab 命令。请注意,Python 脚本直接写入当前目录中名为record_time.txt的文件,该目录应该是您的主目录。检查该文件以查看命令是否正在执行。该脚本不打印任何内容,因此重定向到log.txt不会收集任何内容。 (在将命令放入 crontab 之前手动运行命令总是一个好主意,以确保它在正常情况下的行为符合您的预期。) -
我的
cron不喜欢&>>重定向,因为这是bash语法,而cron使用普通的旧sh来运行crontab 作业。尝试将其从&>> /path/to/logfile更改为>> /path/to/logfile 2>&1,这是传统的sh做同样事情的方式。如果这不能解决问题,那么让我们从一开始并检查cron服务是否实际运行(执行ps -efa | grep cron)。
标签: python google-cloud-platform virtual-machine google-compute-engine