Crontab 介绍与使用
crontab 是 Linux/Unix 系统中的定时任务调度工具,使用 cron 服务来定期执行指定的命令或脚本。它通常用于自动化任务,如日志清理、备份、定期执行脚本等。
1. Crontab 语法
Crontab 任务的基本格式如下:
* * * * * command
│ │ │ │ │
│ │ │ │ └── 星期(0-7,0和7代表周日)
│ │ │ └──── 月份(1-12)
│ │ └────── 日期(1-31)
│ └──────── 小时(0-23)
└────────── 分钟(0-59)
示例:
30 2 * * * /home/user/backup.sh
🔹 每天凌晨 2:30 运行 backup.sh。
2. Crontab 基本操作
查看当前用户的定时任务
crontab -l
编辑 Crontab 任务
crontab -e
默认会在 vi 或 nano 编辑器中打开 crontab 配置文件。
删除当前用户的所有 Crontab 任务
crontab -r
删除特定用户的 Crontab 任务(需要 root 权限)
crontab -u username -r
3. Crontab 时间表达式示例
调度表达式 | 说明 |
---|---|
0 0 * * * | 每天 00:00 运行 |
0 3 * * 1 | 每周一 03:00 运行 |
0 */2 * * * | 每 2 小时 运行一次 |
30 18 * * 1-5 | 工作日(周一到周五) 18:30 运行 |
*/10 * * * * | 每 10 分钟 运行一次 |
0 9-17 * * * | 每天 9 点到 17 点的每小时 运行 |
4. Crontab 任务输出
默认情况下,crontab 执行的任务不会有任何输出。如果想捕获输出,可以重定向到文件:
0 2 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1
🔹 这会把 backup.sh 的标准输出和错误输出写入 backup.log。
5. 特殊的 Crontab 时间关键字
除了传统的 * * * * * 语法,cron 还支持一些特殊关键字:
关键字 | 等价于 |
---|---|
@reboot | 系统启动时执行 |
@yearly | 0 0 1 1 *(每年 1 月 1 日 00:00 执行) |
@monthly | 0 0 1 * *(每月 1 日 00:00 执行) |
@weekly | 0 0 * * 0(每周日 00:00 执行) |
@daily | 0 0 * * *(每天 00:00 执行) |
@hourly | 0 * * * *(每小时执行一次) |
示例
@reboot /home/user/startup_script.sh
🔹 在系统启动时运行 startup_script.sh。
6. 验证 Crontab 是否生效
Crontab 任务可能不会按预期运行,检查方法:
- 查看 cron 服务是否运行
systemctl status cron # Ubuntu/Debian
service crond status # CentOS
- 检查 cron 运行日志
cat /var/log/syslog | grep CRON # Ubuntu/Debian
cat /var/log/cron.log # CentOS
- 手动运行命令
bash /home/user/backup.sh
确保脚本可执行 (chmod +x backup.sh) 并且 使用绝对路径。
7. Crontab 运行环境
• crontab 默认使用 /bin/sh(而不是 /bin/bash),可能影响脚本执行。
• 环境变量可能不全,建议 在脚本内手动加载环境变量:
PATH=/usr/local/bin:/usr/bin:/bin
总结
• crontab -e 编辑定时任务,crontab -l 查看任务,crontab -r 删除任务。
• 时间格式为 分钟 小时 日期 月份 星期。
• rate(http_requests_total[5m]) 一般可用于 QPS 计算,但可能受数据波动影响。
• 任务执行失败时检查 cron 服务状态和日志。
这样你就可以高效使用 crontab 进行任务调度了!🚀
python
如果你想在 crontab 中执行 Python 脚本,需要确保以下几点:
1. 使用 Python 绝对路径
在 crontab 中,默认环境变量可能不全,因此需要指定 Python 解释器的绝对路径。例如,如果你的 Python 在 /usr/bin/python3,可以这样写:
0 3 * * * /usr/bin/python3 /home/user/myscript.py
🔹 每天凌晨 3 点执行 myscript.py
你可以用以下命令找到 Python 的路径:
which python3
2. 使用虚拟环境(如果你的 Python 运行在虚拟环境中)
如果你使用 venv 或 virtualenv,需要先激活环境:
0 3 * * * /home/user/.venv/bin/python /home/user/myscript.py
🔹 这里 /home/user/.venv/bin/python 是虚拟环境中的 Python 解释器
3. 记录日志
为了调试 Python 脚本,可以将 stdout 和 stderr 记录到日志文件:
0 3 * * * /usr/bin/python3 /home/user/myscript.py >> /home/user/myscript.log 2>&1
🔹 这样可以在 /home/user/myscript.log 中查看脚本的执行情况
4. 确保 myscript.py 可执行
给 Python 脚本添加 可执行权限 并使用 #!/usr/bin/env python3:
chmod +x /home/user/myscript.py
然后在脚本开头加上:
#!/usr/bin/env python3
然后在 crontab 中直接运行:
0 3 * * * /home/user/myscript.py
5. 测试 Crontab 是否生效
- 手动运行 Python 脚本:
/usr/bin/python3 /home/user/myscript.py
确保它能正常执行。
- 检查 cron 是否运行:
systemctl status cron # Ubuntu/Debian
service crond status # CentOS
- 查看 cron 日志:
cat /var/log/syslog | grep CRON # Ubuntu/Debian
cat /var/log/cron # CentOS
这样你的 Python 脚本就可以按计划自动运行了 🚀!