crontab介绍

2 阅读4分钟

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系统启动时执行
@yearly0 0 1 1 *(每年 1 月 1 日 00:00 执行)
@monthly0 0 1 * *(每月 1 日 00:00 执行)
@weekly0 0 * * 0(每周日 00:00 执行)
@daily0 0 * * *(每天 00:00 执行)
@hourly0 * * * *(每小时执行一次)

示例

@reboot /home/user/startup_script.sh

🔹 在系统启动时运行 startup_script.sh

6. 验证 Crontab 是否生效

Crontab 任务可能不会按预期运行,检查方法:

  1. 查看 cron 服务是否运行
systemctl status cron   # Ubuntu/Debian
service crond status    # CentOS
  1. 检查 cron 运行日志
cat /var/log/syslog | grep CRON   # Ubuntu/Debian
cat /var/log/cron.log              # CentOS
  1. 手动运行命令
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 是否生效

  1. 手动运行 Python 脚本
/usr/bin/python3 /home/user/myscript.py

确保它能正常执行。

  1. 检查 cron 是否运行
systemctl status cron   # Ubuntu/Debian
service crond status    # CentOS
  1. 查看 cron 日志
cat /var/log/syslog | grep CRON  # Ubuntu/Debian
cat /var/log/cron                # CentOS

这样你的 Python 脚本就可以按计划自动运行了 🚀!