Cron是Linux系统中以后台进程模式,周期性执行的服务。
服务对应的进程名为Crond。
时间间隔的最小单位为分钟
注意:集群环境下需要同步时间 NTP
# 查看是否安装
[root@localhost ~]# rpm -qa cronie
cronie-1.4.11-23.el7.aarch64
# 查看安装路径信息
[root@localhost ~]# rpm -ql cronie
/etc/cron.d
/etc/cron.d/0hourly
/etc/cron.deny
/etc/pam.d/crond
/etc/sysconfig/crond
/usr/bin/crontab
/usr/lib/systemd/system/crond.service
/usr/sbin/crond
/usr/share/doc/cronie-1.4.11
/usr/share/doc/cronie-1.4.11/AUTHORS
/usr/share/doc/cronie-1.4.11/COPYING
/usr/share/doc/cronie-1.4.11/ChangeLog
/usr/share/doc/cronie-1.4.11/INSTALL
/usr/share/doc/cronie-1.4.11/README
/usr/share/man/man1/crontab.1.gz
/usr/share/man/man5/crontab.5.gz
/usr/share/man/man8/cron.8.gz
/usr/share/man/man8/crond.8.gz
/var/spool/cron
# 查看系统定时任务,在/etc目录下,以cron开头的
[root@localhost ~]# ls -al /etc/ | grep cron
-rw-------. 1 root root 541 Aug 9 2019 anacrontab
drwxr-xr-x. 2 root root 4096 Dec 25 12:42 cron.d
drwxr-xr-x. 2 root root 4096 Dec 25 10:47 cron.daily
-rw-------. 1 root root 0 Aug 9 2019 cron.deny
drwxr-xr-x. 2 root root 4096 Dec 25 10:46 cron.hourly
drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.monthly
-rw-r--r--. 1 root root 451 Jun 10 2014 crontab
drwxr-xr-x. 2 root root 4096 Jun 10 2014 cron.weekly
种类
croud
atd
临时的,运行一次
anacron
非7*24小时的
系统定时任务
- cron.hourly 每小时运行的定时任务
- cron.daliy 每天运行的定时任务
- cron.weekly 每周运行的定时任务
- cron.monthly 每月运行的定时任务
- cron.deny 拒绝定时任务黑名单
- crontab 定时任务配置文件
案例1:日志分割,系统定时任务+logrotate
# 案例位置
[root@localhost ~]# cd /etc/cron.daily/
[root@localhost cron.daily]# ll
total 8
-rwx------. 1 root root 219 Apr 1 2020 logrotate
-rwxr-xr-x. 1 root root 618 Oct 30 2018 man-db.cron
案例2:locate定时更新db,系统定时任务+mlocate
案例位置同案例1
用户定时任务
重要文件&目录
/var/log/cron,系统定时任务文件,不显示对错信息
/etc/deny,定时任务黑名单
/var/spool/cron,每分钟都会查看该路径下系统用户和root
如何使用
crontab命令, cron table定时任务列表
常见的参数
crontab -l 查看定时任务列表
crontab -e 编辑定时任务列表
crontab -r 删除定时任务列表
crontab -i 交互
crontab -u 指定用户定时任务列表
特殊符号
- user-name command to be executed
分 时 日 月 周
分钟 0-59
小时 0-23
日 1-31
月 1-12或英文
周 周数/周几/星期几/0-6
/ 表示间隔,每分钟、每小时
- user-name command to be executed
[root@localhost cron]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
步骤
- crontab -e
- 按照格式写好 * * * * *
- 按照需求替换 每个*对应的值
# 每天8:30分执行updatedb
30 8 * * * updatedb
# 每天早上4点00分执行/root/backup.sh脚本
0 4 * * * /root/backup.sh
# 每周六凌晨1点10分,重启httpd服务
10 1 * * 6 systemctl restart httpd
# 每周六和周日凌晨1点10分,重启httpd服务
10 1 * * 6,0 systemctl restart httpd
# 每月1号 10号 20号 PM1点45分,重启httpd服务
45 13 1,10,20 * * systemctl restart httpd
# 每隔1小时,重启httpd服务
0 */1 * * * systemctl restart httpd
# 每月4号与周1-周三晚上11点,重启httpd服务
0 23 4 * 1-3 systemctl restart httpd
# 每周五凌晨5点通过rsync实现备份
0 5 * * 5 rsync -avzP a.txt rsync_backup@114.116.7.185::data --password-file=/etc/rsync.pass