我对创建 cron 作业和一般的 linux 环境还很陌生,如果问题听起来太简单,请提前致歉。我会尽量清楚地提出我的问题。就这样吧,
我已经使用 Python(3.5.2 版本)创建了一个简单的电子邮件(发送给自己)脚本,我想使用 cron 作业计划安排此脚本每 2 分钟运行一次。我正在使用存储我的 Python 脚本的 SSH 登录远程 Linux 服务器。当我使用 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
但没有成功。非常感谢任何帮助。
谢谢!
最佳答案
如果这对我有帮助的话,我遇到了完全相同的情况,但我发现由于我使用不同的 conda 环境来编写我的脚本;我必须通过 shebang #!我用来在脚本中编写脚本的环境的 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
关于python - Cron 作业运行成功但没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48039841/