Linux crond
对于基于 RHEL 的系统(如 CentOS):
sudo yum install cronie
sudo systemctl start crond
sudo systemctl enable crond
# 对于基于 systemd 的系统(如 CentOS 7 或更高版本)
sudo systemctl status crond
用户任务调度
命令操作:
- 编辑任务:
crontab -e - 查看任务:
crontab -l - 删除任务:
crontab -r - 文件存储:
/var/spool/cron/用户名
服务管理
启动/停止:
systemctl start|stop|restart crond
任务格式
标准语法:
* * * * * command
# 分 时 日 月 周 命令
示例:
每分钟执行:* * * * * /path/to/command
每天凌晨2点备份:0 2 * * * /path/to/backup.sh
每周一上午5点执行:0 5 * * 1 /path/to/cleanup.sh
每隔10分钟执行:*/10 * * * * /path/to/script.sh
使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定执行时间。
| 时间设置 | 含义 |
|---|---|
* * * * * |
每分钟执行一次 |
0 * * * * |
每小时的第 0 分钟执行一次 |
0 0 * * * |
每天的午夜(0 点)执行一次 |
0 0 * * 0 |
每周日的午夜(0 点)执行一次 |
0 0 1 * * |
每个月的第一天午夜(0 点)执行一次 |
0 0 L * * |
每个月的最后一天午夜(0 点)执行一次 |
0 0 1 1 * |
每年的第一天午夜(0 点)执行一次 |
0 0 * * 3 |
每周三的午夜(0 点)执行一次 |
0 0 1,15 * * |
每个月的第 1 和第 15 天午夜(0 点)执行一次 |
0 0 * * FRI |
每周五的午夜(0 点)执行一次 |
0 0 * * 5 |
每周五的午夜(0 点)执行一次 |
0 8-17 * * * |
每天的上午 8 点到下午 5 点每小时执行一次 |
0 12 * * MON |
每周一的中午(12 点)执行一次 |
0 0 15 * * |
每个月的第 15 天午夜(0 点)执行一次 |
0 0 * * 3 |
每周三的午夜(0 点)执行一次 |
0 8-17 * * * |
每天的上午 8 点到下午 5 点每小时执行一次 |
0 0 * * 1-5 |
每个工作日的午夜(0 点)执行一次 |
0 0 1 * FRI |
每个月的第一个星期五午夜(0 点)执行一次 |
0 0 1,15 * * |
每个月的第 1 和第 15 天午夜(0 点)执行一次 |
0 0 15 1 * |
每年的 1 月 15 日午夜(0 点)执行一次 |
0 0 * * 7 |
每周日的午夜(0 点)执行一次 |
0 0 * * 5 |
每周五的午夜(0 点)执行一次 |
实例
每一分钟执行一次 /bin/ls:
* * * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup:
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name:
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha":
20 0-23/2 * * * echo "haha"
下面再看看几个具体的例子:
0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令
注意:当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh > /dev/null 2>&1

浙公网安备 33010602011771号