所以我有一个 python 脚本,可以拉取 git/svn/p4 存储库并对数据库进行一些写入操作。
我只是想自动运行该脚本,并且根据我在系统日志中看到的情况,它正在运行,甚至我尝试通过管道传输输出的文件也正在创建,但该文件是空的。这是 cron 作业:
10 04 * * * user /usr/bin/python2.7 /home/user/script.py -f someFlag > ~/cronout.log 2&>1
有点难住了,不知道从哪里开始。认为这可能是钥匙串密码的要求,等等。任何想法都会有帮助!
答案1
使用 tee 抓取输出
tee
从标准输入/输出读取以写入文件。我有一个支持我的要求之一的 Python 脚本,但简单的“>”重定向失败。 Tee是抓取输出的方式。
你的线路应该是:
10 04 * * * user /usr/bin/python2.7 /home/user/script.py -f someFlag | tee -a ~/cronout.log 2>&1
尝试这个:将 python 脚本包装在 /usr/bin/ 目录中的 #!/bin/bash 脚本中。
然后更换你的线路:
10 04 * * * user /usr/bin/myPythonWrapperInBash& > /path/to/log/out 2>&1
Tee 调用说明
- [-a] 追加文件。
- 普通调用(无标志)将覆盖该文件,并且您将丢失日志。
答案2
事实证明,问题出在 Python 脚本所需的环境变量上,而且它太早出现在脚本中,以至于在输出任何内容之前就破坏了脚本。
Cron 没有常规环境。
此外,拉取 git 存储库需要 ssh 密码,我可以通过使用 Keychain 来解决这个问题。
使用的帮助这篇博文和一些 bash 包装脚本,我能够让一切正常工作并自动化。