什么是计划任务
后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好。
运维常见的计划任务
- 备份数据库 备份日志文件 备份文件夹文件
- 清空指定文件 清空日志文件
- 提醒用户 发送邮件
此时就使用到了crond服务
为什么需要crond定时任务
- crond简单实用
- 夜间访问量少,适合备份。用定时任务夜间备份方便
- 备份时间长
- 任务重复性高
- 自动化
利用Cron工具解决周期性的,重复性的,自动完成的,需要备份,需要自动化等运维工作。
检查并安装crond
[root@hecs-215335 ~]# rpm -qa | grep croncronie-anacron-1.4.11-24.el7_9.x86_64crontabs-1.11-6.20121102git.el7.noarchcronie-1.4.11-24.el7_9.x86_64 #定时任务主程序包,提供crond守护进程等工具rpm -ivh [包] #安装rpm包rpm -qa #查看全部安装的包rpm -ql [包] #查看rpm包的安装信息rpm -qf [包] #查看命令属于的安装包rpm -e [包] #卸载软件
检查crond服务是否运行
systemctl status crond.service #centos7service crond status #centos6ps aux
Crond 定时任务服务应用
- Cron 定时任务的名称
- Crond 定时任务的进程名
- Crontab 管理定时任务命令
Cron是Linux系统中以后台进程模式周期性执行命令或指定程序任务的服务软件名。
Linux系统启动后,cron软件便会启动,对应的进程名字叫做crond,默认是定期(每分钟检查一次)检查系统中是否有需要执行的任务计划,如果有,则按计划进行,好比我们平时用的闹钟。
crond最快是以分钟执行的
如果需求是秒,就不要用crond了,shell更合适
#!/bin/bashwhile Truedoecho "过了一秒"sleep 1done
Linux定时任务软件
at 定时任务工具,依赖于atd服务,适用于执行一次就结束的调度任务
比如突发任务,某天夜里3点需要临时备份数据可以使用at软件
ps -aux | grep atd #查看atd服务是否运行语法HH:MMYYYY-mm-ddnoon #正午中午12点midnight #午夜晚12点teatime #下午茶时间,下午四点tomorrow #明天now+1min #—分钟之后now+1minutes/hours/days/weeks
用at创建一个定时任务
[root@hecs-215335 ~]# at now+1minat> touch /tmp/123.txtat> <EOT> #Ctrl+d 即可退出#1分钟后执行命令
定时任务与邮件服务
邮件服务
1.检查服务器端口,25号邮件端口是否打开,centos5是sendmail,centos6、7是postfix服务ss -tnl | grep 25netstat -ntlp | grep 252.发现未启动25端口的话,则需要启动postfix服务,用于发送邮件首先更改postfix配置文件vim /etc/postfix / main.cf 修改如下参数inet_interfaces = allinet_protocols = all3.启动postfix服务systemctl start postfix4.stmp pop3 imap4协议
mailx命令
MTA:Mail Transport Agent ,邮件传送代理,也就是postfix服务
MUA: Mail user Agent ,收发邮件的客户端,可以是 foxmail ,也可以是其他客户端
Centos7通过命令mailx发送邮件,通过mail命令是收邮件
mailx -s "hello liao" liao123 #发送一份邮件

非交互式发邮件
mailx -s "test 123" root < mail.txt #将文件内容发送到邮箱
定时任务Cron实践
向crond进程提交任务的方式与at不同,crond需要读取配置文件,且有固定的文件格式,通过crontab命令管理文件
cron任务分为两类
- 系统定时任务
crond服务除了会在工祚时查看/var/spool/cron文件夹下的定时任务文件以外,还会查看/etc/cron.d目录以及/etc/anacrontab 下面的文件内容,里面存放每天、每周、每月需要执行的系统任务。
[root@localhost ~]# ls -l /etc/ | grep cron-rw-------. 1 root root 541 1月 14 00:52 anacrontabdrwxr-xr-x. 2 root root 21 2月 15 11:13 cron.d #系统定时任务drwxr-xr-x. 2 root root 57 2月 15 11:13 cron.daily #每天的任务-rw-------. 1 root root 0 1月 14 00:52 cron.denydrwxr-xr-x. 2 root root 22 2月 15 11:13 cron.hourly #每小时的任务drwxr-xr-x. 2 root root 6 6月 10 2014 cron.monthly #每个月的任务-rw-r--r--. 1 root root 451 6月 10 2014 crontab #Cron配置文件drwxr-xr-x. 2 root root 6 6月 10 2014 cron.weekly #每周的定时任务
[root@localhost ~]# cat /etc/crontabSHELL=/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
用户定时任务
当系统管理员(root)或是普通用户(liao)创建了需要定期执行的任务,可以使用crontab命令配置
crond服务在启动时,会每分钟查看/var/spool/cron 路径下以系统用户名命名的定时任务文件,以确定是否有需要执行的任务。
ls -l /var/spool/cron #该文件夹下是每个用户的定时命令文件cat /var/spool/cron/root #其中就是输入的定时命令crontab -l #直接查看当前用户的定时任务
crontab命令
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似
| 参数 | 解释 | 使用示例 |
|---|---|---|
| -l | list 查看定时任务 | crontab -l |
| -e | edit 编辑定时任务 建议手动编辑 | crontab -e |
| -i | 删除定时任务,提示用户确认删除,避免出错 | crontab -i |
| -r | 删除定时任务,移除/var/spool/cron/username 文件 | crontab -r |
| -u | 指定用户执行任务,root可以管理普通用户计划任务 | crontab -u |
用户查看定时任务
crontab -e #编辑用户的定时任务,等于如上命令编辑的是vi /var/spool/cron/root文件crontab -l #列出用户设置的定时任务,等于cat var/spool/cron/root
检查crond服务是否运行
systemctl is-active crondps -ef | grep crond
定时格式
[root@localhost ~]# cat /etc/crontabSHELL=/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任务配置基本格式* * * * * command分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令第1列表示分钟1~59每分钟用*或者*/1表示第2列表示小时1~23 (0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行的命令(注意:day of month和day of week一般不同时使用)(注意:day of month和day of week一般不同时使用)(注意:day of month和day of week一般不同时使用)
时间表示法
- 特定值:时间点有效取值范围内的值
- 通配符:某时间点有效范围内的所有值 | 特殊符号 | 含义 | | —- | —- | | | 号,表示”每”的意思,如00 23 cmd表示每月每周每日的23:00整点执行命令 | | - | 减号表示时间范围分隔符,如17-19,代表每天的17、18、19点 | | , | 逗号,表示分隔时段,如30 17,18,19 表示每天的17、18、19的半点执行命令 | | /n | n表示可以整除的数字,每隔n的单位时间,如每隔10分钟表示/10 cmd |
定时任务练习①
30 8 * * * echo "go to school" #早上8点30去上学00 00 * * * echo "go sleep" #晚上12点睡觉0-10 10 * * * echo "123123" #每天10点整到10点10分3 4,5,6 * * * echo "123123" #每天4 5 6点的3分整0 * * * * #每小时执行,每小时的整点执行1 2 * * 4 #每周执行,每周四的凌晨2点1分执行1 2 3 * * #每月执行,每月的3号的凌晨2点1分执行1 2 3 4 * #每年执行,每年的4月份3号的凌晨2点1分执行1 2 * * 3,5 #每周三和周五的2点1分执行* 13,14 * * 6,0 #每周六、周日的下午1点和2点的每一分钟都执行0 9-18 * * 1-5 #周一到周五的每天早上9点一直到下午6点的每一个整点(工作日的每个小时整点)*/10 * * * * #每隔10分钟执行一次任务
定时任务练习②
*/1 * * * * #每分钟执行命令30 3,0 * * * #每天的凌晨3点半,和12点半执行脚本0 */6 * * * #每隔6小时,相当于6、12、18、24点的半点时刻,执行脚本30 21 * * * /usr/bin/systemctl stop nginx #每天晚上9点30重启nginx45 4 1,10 * * #每月的1、10号凌晨4点45执行脚本10 1 * * 6,7 #每周六、周日的凌晨1点10分执行命令*/30 18-23 * * * #每天的18点到23点之间,每隔30分钟执行一次0 * * * * #每隔一小时执行一次0 11 * 4 1-3 #4月份的周一到周三的上午11点执行脚本0 7-11*/2 * * * #每天早上7点到上午11点,每2小时运行cmd命令* 6 * * * #每天6点执行脚本0 4 * * 6 #每周六凌晨4:00执行5 4 * * 6 #每周六凌晨4:05执行40 8 * * * #每天8点40执行31 10/2 * * * #每天10点31开始 每2小时重复一次0 2 * * 1-5 #每周1到5 2点执行一次0 8,9 * * 1-5 #每周1到5 8 9点执行一次0 10,16 * * * #每天的10点 16点执行一次
