使用python-crontab配置定时任务无输出问题咨询
问题解答
这个问题和缺少os库导入没有任何关系,核心是对cron运行逻辑、python-crontab模块作用的理解存在偏差,具体问题点如下:
- python-crontab模块的作用是直接读写系统crontab定时任务配置表,不是用来在当前脚本进程里跑定时任务的。你执行
python3 testcron.py的效果只是给root用户的crontab新增了一条每分钟执行echo hello_world的规则,脚本执行完就会直接退出,不会在当前终端驻留等待输出。 - cron是系统后台运行的守护进程,它执行的所有任务都和你当前打开的交互终端会话完全隔离,任务输出默认不会直接打印到你当前打开的终端窗口。默认情况下cron会把任务输出通过本地邮件发送给任务所属用户,没有配置邮件服务的话输出会直接丢弃,你看不到输出是正常现象。
- 你手动通过
crontab -e添加脚本路径不生效,通常是以下几个原因:- 没有写绝对路径:cron运行时加载的PATH环境变量非常精简,既找不到没有写全路径的
testcron.py文件,也可能找不到python3解释器,必须写全文件和解释器的绝对路径 - 没有给脚本加解释器声明:如果直接把py文件路径作为命令写在crontab里,脚本第一行必须加
#!/usr/bin/env python3的shebang头,否则cron不知道用什么程序执行这个文件 - 权限不匹配:你代码里操作的是root用户的crontab配置,如果是普通用户执行脚本、或者给普通用户加crontab任务,会因为权限不足无法写入root的配置,任务自然不会生效。
- 没有写绝对路径:cron运行时加载的PATH环境变量非常精简,既找不到没有写全路径的
验证方法
如果要确认cron任务正常运行,最稳妥的方式是把输出重定向到固定日志文件,不要指望输出到当前交互终端:
- 先确认任务是否真的写入crontab,执行
sudo crontab -u root -l,如果能看到类似* * * * * echo hello_world的条目,说明python-crontab写入配置成功 - 把任务命令修改为重定向输出到日志,比如:
* * * * * echo hello_world >> /tmp/cron_test.log 2>&1
等一分钟后查看/tmp/cron_test.log文件,如果有hello_world内容就说明任务正常运行
3. 手动添加py脚本到crontab时,写全解释器和脚本的绝对路径,例如:
* * * * * /usr/bin/python3 /your/absolute/path/testcron.py >> /tmp/cron_test.log 2>&1
内容的提问来源于stack exchange,提问作者PeterWegner90
相关产品推荐
相关产品推荐

