我对创建cron作业和Linux环境非常陌生,所以如果问题听起来太简单,请提前道歉。我会尽可能清楚地表达我的问题。所以在这里,
我使用Python(3.5.2版本)创建了一个简单的电子邮件(发送给自己)脚本,我想安排这个脚本使用cron作业调度每2分钟运行一次。我使用SSH登录远程linux服务器,我的Python脚本存储在那里。当我使用linux终端手动运行脚本时,脚本运行完全正常。当我尝试为此脚本安排cron作业计划时,我的猜测是该脚本运行,因为我可以使用
查看日志中的运行sudo grep CRON /var/log/syslog
我在日志中看到的是这样的
Dec 30 19:38:01 abc-abcStation CRON[18707]: (abc) CMD (/home/abc/anuj/TPA/Test_Cron.py)
以2分钟的间隔
但是运行并没有做它应该做的事情(发送电子邮件),这是我手动运行时所做的。我的cron工作看起来像这样
*/2 * * * * /home/abc/anuj/TPA/Test_Cron.py
电子邮件发送脚本是Test_Cron.py,看起来像这样
import smtplib
server = smtplib.SMTP('smtp.office365.com', 587)
server.starttls()
server.login("username@mycompany.com", "mypassword")
msg = "TEST MESSAGE!"
server.sendmail("username@mycompany.com", "myemail@mycompany.com", msg)
server.quit()
我对这类问题进行了大量搜索,发现了类似的案例,尝试了所有建议的解决方案,但我仍然遗漏了一些东西。
我的猜测是,这与设置正确的路径有关。我尝试在crontab语句上面设置路径,比如
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/2 * * * * /home/abc/anuj/TPA/Test_Cron.py
也尝试了,
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/2 * * * * /home/abc/anuj/TPA/Test_Cron.py
和
*/2 * * * * cd /home/abc/anuj/TPA/ && Test_Cron.py
但没有成功。非常感谢任何帮助。
谢谢!
答案 0 :(得分:0)
如果这有助于我有相同的确切情况,但我发现因为我使用不同的conda环境来编写我的脚本;我必须通过shebang#指定!用于env的python解释器的路径我用来编写脚本中的脚本。
这使它成功了。我还有另一个脚本运行正常,否则通过cron作业使用“python3”命令调用它。
我只是猜测某些模块可能没有正确加载而且在没有写任何输出的情况下都失败了。
获取你的conda envs路径
conda info --envs
将其添加到脚本的顶部,只需在cron作业中提供路径。
#!/home/username/anaconda3/envs/AutoBrowsing/bin/python
示例Cronjob:
*/6 * * * * /home/username/path/to/script.py >> /home/username/scriptlog.txt