crontab 命令
crontab
是 Unix 和类 Unix 操作系统中用于定时执行任务的命令。通过 crontab
命令,用户可以设置定期执行的任务,称为 "cron jobs"。这些任务在特定的时间间隔运行,适用于自动化脚本、备份、监控、维护等场景。
crontab
基本命令:
-
查看当前用户的 crontab 任务:
crontab -l
这会列出当前用户的所有定时任务。
-
编辑当前用户的 crontab:
crontab -e
这会打开一个编辑器,允许你修改和添加定时任务。
-
删除当前用户的 crontab:
crontab -r
这会删除当前用户的所有定时任务。
-
列出所有用户的 crontab 文件(需要管理员权限):
sudo cat /var/spool/cron/crontabs/
crontab
文件格式:
crontab
文件中的每一行定义一个定时任务,格式如下:
* * * * * command_to_run
这五个星号分别代表不同的时间字段,具体含义如下:
- 分钟(0 - 59)
- 小时(0 - 23)
- 日(1 - 31)
- 月(1 - 12)
- 星期几(0 - 7,其中 0 和 7 都表示星期天)
例如:
0 5 * * * /path/to/script.sh
: 每天凌晨 5 点执行script.sh
。0 0 1 * * /path/to/backup.sh
: 每月的第 1 天午夜 0 点执行backup.sh
。*/15 * * * * /path/to/job.sh
: 每 15 分钟执行一次job.sh
。
特殊字符:
-
逗号 ( , ):列出多个值。
- 例:
0,30 5 * * *
表示在 5:00 和 5:30 各执行一次任务。
- 例:
-
连字符 ( - ):表示一个范围。
- 例:
0 9-17 * * *
表示每天 9:00 到 17:00 之间的每个小时执行一次任务。
- 例:
-
星号 ( * ):表示任意值。
- 例:
* * * * *
表示每分钟都执行任务。
- 例:
-
斜杠 ( / ):表示步进执行。
- 例:
*/10 * * * *
表示每 10 分钟执行一次任务。
- 例:
环境变量:
crontab
任务执行时,有一些重要的环境变量可以设置:
MAILTO
: 如果设置了这个变量,cron
会将任务的输出发送到指定的邮件地址。- 例:
MAILTO="[email protected]"
- 例:
SHELL
: 指定使用的 shell,默认是/bin/sh
。
示例:
假设你想每天早上 8 点运行一个 Python 脚本 /home/user/script.py
,并将输出结果保存在 /home/user/output.log
中,可以在 crontab -e
中添加以下内容:
0 8 * * * /usr/bin/python3 /home/user/script.py >> /home/user/output.log 2>&1
这个命令表示每天 8 点执行 script.py
,并将输出追加到 output.log
,错误信息也会被重定向到同一个文件。
常见问题:
crontab
环境不同:cron
执行任务时的环境与你手动执行脚本的环境不同,可能缺少一些环境变量(如PATH
)。因此最好在脚本中指定完整的命令路径或显式声明所需的环境变量。- 脚本中的权限问题:如果脚本涉及权限控制,确保脚本有适当的执行权限 (
chmod +x script.sh
)。