You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:47:32