Python脚本使用CronTab调度任务遇用户未知OSError问题求助
Python crontab库任务调度用户错误问题解决
问题场景
我尝试用Python的crontab库实现定时任务,编写了如下代码:
import datetime def myjob(): print("%s: This is my present Job" % (datetime.datetime.now())) from crontab import CronTab cron = CronTab(user='user') job = cron.new(myjob) job.minute.every(1) cron.write()
运行后抛出错误:
OSError: Read crontab user: b"crontab: user `user' unknown\n"
更新:改用raspberrypi用户后,仍出现相同错误。
解决方法
1. 确认正确的用户身份
- 在终端执行
whoami,获取当前运行脚本的实际用户名,不要使用不存在或不匹配的用户。 - 如果用
sudo运行脚本,当前用户是root,需对应设置user='root'或留空(CronTab()默认使用执行脚本的用户)。
2. 检查用户crontab权限
执行crontab -l(切换到目标用户后),如果提示权限拒绝,需检查系统的/etc/cron.allow和/etc/cron.deny文件,确保目标用户在允许列表中。
3. 修正代码的核心错误
原代码存在两个关键问题:
- 直接传递Python函数给
cron.new():crontab是系统级调度工具,只能执行系统命令,无法直接调用Python函数。 - 用户参数不匹配:需使用实际存在且有权限的用户。
修正后的示例代码:
import datetime from crontab import CronTab # 任务逻辑单独写在脚本中,这里仅作示例 def myjob(): print("%s: This is my present Job" % (datetime.datetime.now())) # 使用当前执行脚本的用户,无需指定user参数 cron = CronTab() # 若需指定用户,替换为实际用户名: # cron = CronTab(user='raspberrypi') # 传入执行任务的系统命令,需填写脚本的完整路径 job = cron.new(command='python3 /home/raspberrypi/your_task_script.py') # 设置每分钟执行一次 job.minute.every(1) # 写入crontab配置 cron.write()
4. 验证配置
执行crontab -l查看是否成功添加定时任务,同时可以查看系统日志(如/var/log/cron.log)确认任务是否正常执行。
内容的提问来源于stack exchange,提问作者Mainland
相关产品推荐
相关产品推荐

