如何把 Python 脚本配置为 cron 定时任务?

把 Python 脚本加到 cron:写好脚本 → crontab -e 添加定时行 → 注意用绝对路径和完整环境变量。本文给出完整步骤及常见坑。

最佳实践
如何把 Python 脚本配置为 cron 定时任务?封面

步骤:写好 Python 脚本 → 用 crontab -e 编辑定时任务表 → 添加一行"分 时 日 月 周 命令",其中 Python 解释器和脚本都用绝对路径,输出重定向到日志文件。

第一步:准备脚本

# /home/user/scripts/cleanup.py
import os
import glob

dir_path = '/tmp/temp_files/'
for f in glob.glob(os.path.join(dir_path, '*')):
    os.remove(f)
    print(f"已删除: {f}")

第二步:添加到 crontab

crontab -e

添加一行(每天凌晨 0 点执行):

0 0 * * * /usr/bin/python3 /home/user/scripts/cleanup.py >> /var/log/cleanup.log 2>&1

关键注意事项

  1. 全部用绝对路径:cron 环境的 PATH 极简,python3 可能找不到,用 which python3 查到完整路径;
  2. 虚拟环境:要用虚拟环境里的解释器,写它的绝对路径:/home/user/venv/bin/python
  3. 工作目录:cron 没有"当前目录"概念,脚本里的相对路径会出错,统一用绝对路径;
  4. 环境变量:脚本依赖的环境变量(如 API Key)需在 crontab 顶部定义或脚本内显式设置;
  5. 输出重定向>> log 2>&1 把输出和错误都写进日志,便于排查。

crontab 时间格式速查

┌ 分 (0-59)
│ ┌ 时 (0-23)
│ │ ┌ 日 (1-31)
│ │ │ ┌ 月 (1-12)
│ │ │ │ ┌ 周 (0-6, 0=周日)
* * * * * 命令

常用例子:*/5 * * * * 每 5 分钟;0 */2 * * * 每 2 小时;0 9 * * 1-5 工作日早 9 点。

观测云对照

cron 任务的日志写入文件后,观测云 DataKit 可采集到平台统一检索;还可以配置监控器,在任务输出 ERROR 或日志长时间无更新(任务没跑)时告警。

常见问题(FAQ)

Q:脚本手动能跑、cron 里就不行?
A:90% 是环境问题——检查绝对路径、环境变量、权限。在 crontab 里临时加 * * * * * env > /tmp/cron-env.txt 可以查看 cron 的实际环境。

Q:想在 Python 代码内部做调度而不是用系统 cron?
A:用 APScheduler 或 schedule 库,在进程内定时执行任务;但进程挂了任务就停,系统 cron 更可靠。

Q:如何确认 cron 任务有没有执行?
A:看 /var/log/syslog(Debian/Ubuntu)或 /var/log/cron(CentOS)中的 cron 守护进程记录。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台