centos7如何设置定时任务定时执行指定的python脚本
在 CentOS 7 中,最标准且稳定的方式是使用系统自带的 Cron (crontab) 服务。由于 Cron 运行时的环境变量与普通终端不同,配置时的关键在于:必须全部使用绝对路径,并建议重定向日志输出以便排查错误。操作步骤1.确认 Cron 服务已启动:耗时约 10 秒。在终端检查 crond 服务状态,确保其正常运行并开机自启:Bash# 查看服务状态
systemctl status crond
如果未运行,启动服务并设置开机自启
systemctl start crond
systemctl enable crond
2.获取 Python 和脚本的绝对路径:避免因环境变量导致找不到命令。Cron 默认只在极简的环境变量中运行,直接写 python 或相对路径容易报错。请在终端查询绝对路径:Bash# 查找 Python 绝对路径(例如:/usr/bin/python3 或虚拟环境中的路径)
which python3
进入脚本所在目录获取完整路径
cd /path/to/your_project
pwd
假设你的 Python 路径为 /usr/bin/python3,脚本绝对路径为 /home/user/myscript.py。3.编辑 Cron 任务配置:打开当前用户的 crontab 配置文件。运行以下命令进入编辑界面(默认使用 vi/vim 编译器):Bashcrontab -e
4.添加定时任务规则并保存:配置执行周期与重定向日志。按 i 键进入插入模式,在文件末尾添加你的定时任务规则(强烈建议添加日志输出):Bash# 语法格式:
分 时 日 月 周 /Python绝对路径 /脚本绝对路径 >> /日志绝对路径 2>&1
示例:每天凌晨 2:00 执行 Python 脚本,并将运行日志存入 cron_run.log
0 2 * /usr/bin/python3 /home/user/myscript.py >> /home/user/cron_run.log 2>&1
编辑完成后,按 Esc 退出插入模式,输入 :wq 保存并退出。常用时间配置示例列表Cron 的时间表达式由 5 个占位符组成:分 时 日 月 周。表达式执行频率/5 每 5 分钟执行一次0 每小时的整点执行一次0 2 每天凌晨 2:00 执行30 8 1每周一早上 8:30 执行0 0 1 每月 1 号 midnight (00:00) 执行避坑指南(关键细节)使用了 Python 虚拟环境 (venv / conda)如果你使用了虚拟环境,不需要在 Cron 里写 source activate,直接将路径指向虚拟环境中的 Python 解释器即可:Bash0 2 * /home/user/venv/bin/python /home/user/myscript.py >> /home/user/cron.log 2>&1
脚本内部涉及相对文件路径如果 Python 脚本内部有 open('data.json') 这类读取相对路径的代码,Cron 执行时可能会找不到文件。建议在 Python 脚本开头加上:Pythonimport os
import sys
强制将工作目录切换为当前脚本所在的目录
os.chdir(os.path.dirname(os.path.abspath(__file__)))
如何查看任务是否被触发与排查错误查看系统的 Cron 执行日志:tail -f /var/log/cron查看脚本自己的输出/报错日志:cat /home/user/cron_run.log查看当前用户的所有定时任务:crontab -l