从 cron 运行时,Python 脚本不会写入数据

Ruu*_*uud 7 python scripts

当我在终端中运行 python 脚本时,它会按预期运行;下载文件并将其保存在所需位置。

sudo python script.py    
Run Code Online (Sandbox Code Playgroud)

我已将 python 脚本添加到根 crontab,但随后它按预期运行,除非它不写入文件。

$ sudo crontab -l
> * * * * * python /home/test/script.py >> /var/log/test.log 2>&1
Run Code Online (Sandbox Code Playgroud)

下面是一个仍然存在问题的简化脚本:

#!/usr/bin/python

scheduleUrl = 'http://test.com/schedule.xml'
schedule = '/var/test/schedule.xml'

# Download url and save as filename
def wget(url, filename):
    import urllib2
    try:
        response = urllib2.urlopen(url)
    except Exception:
        import traceback
        logging.exception('generic exception: ' + traceback.format_exc())
    else:
        print('writing:'+filename+';')
        output = open(filename,'wb')
        output.write(response.read())
        output.close()

# Download the schedule
wget(scheduleUrl, schedule)
Run Code Online (Sandbox Code Playgroud)

我确实收到消息“正在写入:文件名;” 在日志中,cron 条目输出到日志中。但实际文件无处可寻......

目录 /var/test 被修改为 777 并且使用任何用户,我都可以随意添加和更改文件。

jip*_*pie 5

  • 检查日志文件grep -i cron /var/log/syslog
  • 在 crontab 末尾添加一个空行,这一直是一个已知的错误,不确定是否已解决。
  • 2>&1从命令行中删除,直到它按设计工作。任何有用的错误都会被重定向到未创建的文件;有效地丢失了。
  • 检查 root 是否收到邮件(例如使用mutt或 in /var/spool/mail)。默认情况下,来自 cron 的错误消息会发送到系统电子邮件。

还:

  • 尽快重新考虑 777 权限。从 root 运行时,755 root:root 应该足以检查非特权用户的日志)
  • 重新考虑从 root 运行脚本,这是不好的做法。