在 Linux 系统中,定时任务是自动化和定期执行任务的重要手段。其中,crontab 和 crond 是两个核心概念。
crond
crond 是 cron daemon 的缩写,是 Linux 下的一个守护进程,它负责周期性地检查并执行 crontab 中定义的定时任务。换句话说,crontab 定义了任务,而 crond 则负责执行这些任务。
crontab
crontab 是 cron table 的缩写,是一个用于设置、维护或检查用户的定时任务的命令。通过编辑 crontab 文件,用户可以指定在特定时间或间隔内要执行的命令或脚本。
基本格式
crontab [选项] 文件名
-e
:编辑用户的 crontab 文件;
-l
:列出用户当前的 crontab 内容;
-r
:删除用户的 crontab 文件;
-i
:在删除用户 crontab 文件之前进行确认。
当使用 crontab -e
命令时,系统会打开一个编辑器(通常是 vi 或 nano),供用户编辑或添加新的定时任务。
crontab 格式
每一行代表一个定时任务,格式如下:
* * * * * command
分别表示分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-7,0 和 7 都代表星期日)和要执行的命令。
关于通配符:
*
:代表所有可能的值;
,
:用于指定多个值;
-
:用于表示一个范围值;
/
:用于表示重复的频率。
每次编辑完某个用户的 cron 设置后,cron 自动在 /var/spool/cron 下生成一个与此用户同名的文件,此用户的 cron 信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用 crontab -e 来编辑。cron 启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动 cron 服务。
示例
每 1 分钟执行一次 myCommand
* * * * * myCommand
每小时的第 3 和第 15 分钟执行
3,15 * * * * myCommand
在上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * * myCommand
每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 */2 * * myCommand
每周一上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * 1 myCommand
每晚的 21:30 重启 smb
30 21 * * * /etc/init.d/smb restart
每月 1、10、22 日的 4 : 45 重启 smb
45 4 1,10,22 * * /etc/init.d/smb restart
每周六、周日的 1 : 10 重启 smb
10 1 * * 6,0 /etc/init.d/smb restart
每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
0,30 18-23 * * * /etc/init.d/smb restart
每星期六的晚上 11 : 00 pm 重启 smb
0 23 * * 6 /etc/init.d/smb restart
每一小时重启 smb
0 */1 * * * /etc/init.d/smb restart
晚上 11 点到早上 7 点之间,每隔一小时重启 smb
0 23-7/1 * * * /etc/init.d/smb restart