计划任务:后台运行,到了预定时间就会自动执行的任务,前提是:事先手动将计划任务设定好
周期性任务执行
清空/tmp目录下的内容
mysql数据库备份
redis数据库备份
需要用到crond服务
检查crond服务相关软件包
[root@xuexi3 ~]# rpm -qa |grep cron cronie-anacron-1.4.11-23.el7.x86_64 cronie-1.4.11-23.el7.x86_64 crontabs-1.11-6.20121102git.el7.noarch # 定时任务主程序包,提供crond守护进行等工具 [root@xuexi3 ~]# systemctl status crond #查看 crond状态是否在运行 ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; vendor preset: enabled) Active: active (running) since Mon 2022-09-05 09:34:35 n ago Main PID: 1611 (crond) Tasks: 1 CGroup: /system.slice/crond.service └─1611 /usr/sbin/crond -n Sep 05 09:34:35 xuexi3 systemd[1]: Started Command Schedul Sep 05 09:34:35 xuexi3 crond[1611]: (CRON) INFO (RANDOM_DE Sep 05 09:34:37 xuexi3 crond[1611]: (CRON) INFO (running w Hint: Some lines were ellipsized, use -l to show in full.
cron定时任务名字
crond定时任务进程名
crontab管理定时任务命令
cron是linux系统中以后台进行模式周期性执行命令或指定程序任务的服务软件名。
linux系统启动后,cron软件便会启动,对应的进程名叫crond,默认是定期(每分钟检查一次)检查系统中是否有需要执行的任务计划,如果有,则按计划进行,好比我们平时用的闹钟。
利用linux的定时任务cron工具可以解决重复性、周期性、自动备份等运维工作
语法 HH:MM YYYY-mm-dd noon 正午中午12点 midnight 午夜12点 teatime 下午茶时间,下午四点 tomorrow 明天 now+1min 一分钟以后 now+1minutes/hours/days/weeks
1分钟之后运行创建文件 [root@xuexi3 ~]# at now+1min #ctrl+d提交任务 at> touch /tmp 111_at.txt at> <EOT> job 4 at Mon Sep 5 10:16:00 2022 运行之后,通过邮件检查 [root@xuexi3 tmp]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 root Mon Sep 5 10:08 14/554 & 1 Message 1: From root@xuexi3.localdomain Mon Sep 5 10:08:36 2022 Return-Path: <root@xuexi3.localdomain> X-Original-To: root Delivered-To: root@xuexi3.localdomain Subject: Output from your job 2 To: root@xuexi3.localdomain Date: Mon, 5 Sep 2022 10:08:36 +0800 (CST) From: root@xuexi3.localdomain (root) Status: R /bin/bash: line 2: $'\E[D\E[D\E[D\E[D\E[D\E[D\E[D\E[D\E[D\E[D\E[D': command not found
任务计划出发执行后,会通过邮件发送给用户,(并非互联网上的邮件,而是系统内部的邮件服务)
1.检查服务器端口,25号邮件端口是否打开,centos5是sendmail,centos6、7是postfix服务 [root@xuexi3 ~]# netstat -tunlp |grep 25 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1876/master tcp6 0 0 ::1:25 :::* LISTEN 1876/master 2.发现未启动25端口的话,则需要启动 首先更改postfix配置文件 vim /etc/postfix/main.cf 修改如下参数 ient_interfaces = all ient_protocols = all 3.启动postfix服务 systemctl start postfix systemctl status postfix #查看服务状态
网易邮箱邮件解释
smtp:simple mail transmission protocol pop3: Post Office Procotol imap4:Internet Mail Access Procotol
mailx命令
了解三个概念:
MAT:Mail Transport Agent ,邮件传送代理,也就是postfix==服务
MUA:Mail user Agent,收发邮件的客户端,可以是foxmail,也可以是其他客户端
Centos7通过命令mailx发送邮件,通过mail命令是收邮件
[roo@xuexi3 root]$ mailx -s "hello dejun" root #给root系统用户发送邮件 -s添加主题 sssss^H^H^H^H #文章内容 1233333 3332123 . #输入点,退出邮件 EOT #结束符号,end out
mail命令
su - root #切换为root用户 mail #输入mail命令检查邮件
按q退出邮箱
非交互式发邮件
用root给roo回一封邮件,从文本中读取
[root@xuexi3 ~]# vim youjian.txt [root@xuexi3 ~]# mail -s "hello roo" root < youjian.txt
查看邮件
[roo@xuexi3 ~]$ mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/roo": 1 message 1 new >N 1 root Mon Sep 5 11:18 21/591 "hello roo" & 1 Message 1: From root@xuexi3.localdomain Mon Sep 5 11:18:18 2022 Return-Path: <root@xuexi3.localdomain> X-Original-To: roo Delivered-To: roo@xuexi3.localdomain Date: Mon, 05 Sep 2022 11:18:18 +0800 To: roo@xuexi3.localdomain Subject: hello roo User-Agent: Heirloom mailx 12.5 7/5/10 Content-Type: text/plain; charset=us-ascii From: root@xuexi3.localdomain (root) Status: R sss1 sss2 sss3 sss4
向crond进程提交任务的方式与at不同,crond需要读取配置文件,且有固定的文件格式,通过crontab管理文件
cron任务分两类
crond服务处了会在工作时查看/var/spool/cron文件夹下的定时任务文件外,还会查看/etc/cron.d目录以及/etc/anacrontab下面的文件内容,里面存放每天、每周、每月需要执行的系统任务
[root@xuexi3 ~]# ls -l /etc |grep cron -rw-------. 1 root root 541 Aug 9 2019 anacrontab drwxr-xr-x. 2 root root 54 Aug 17 11:55 cron.d #系统定时任务 drwxr-xr-x. 2 root root 57 Aug 17 11:55 cron.daily #每天的任务 -rw-------. 1 root root 0 Aug 9 2019 cron.deny drwxr-xr-x. 2 root root 22 Aug 16 14:33 cron.hourly #每小时的任务 drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.monthly #每月的任务 -rw-r--r--. 1 root root 451 Jun 10 2014 crontab drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.weekly #每周的定时任务
系统定时任务配置文件 /etc/crontab
[root@xuexi3 ~]# 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命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似
参数 | 解释 | 使用示例 |
---|---|---|
-l | list查看定时任务 | crontab -l |
-e | edit编辑定时任务 | crontab -e |
-i | 删除定时任务,提示用户确认删除,避免出错 | crontab -i |
-r | 删除定时任务,移除/var/spool/cron/username文件,全没了 | crontab -r |
-u user | 指定用户执行任务,root可以管理普通用户计划任务 | crontab -u |
crontab命令就是在修改/var/spool/cron中的定时任务文件
用户查看定时任务
crontab -l #列出用户设置的定时任务,等于cat /var/spool/cron/root crontab -e #编辑用户的定时任务,等于如上命令编辑的是 vi /var/spool/cron/root文件
检查crond服务是否运行
[root@xuexi3 ~]# systemctl is-active crond active [root@xuexi3 ~]# ps -ef |grep crond root 1611 1 0 11:57 ? 00:00:00 /usr/sbin/crond -n
定时任务相关的文件
/var/spool/cron 定时任务的配置文件所在的目录 /var/log/cron 定时任务的日志文件 /etc/cron.deny 定时任务黑名单
定时任务的语法格式
查看定时任务配置文件
cat /etc/crontab
每天上午8点30,去上学 30 8 * * * go to school 每天晚上12点回家回家睡觉 00 00 * * * go home
定时任务符号
crontab任务配置基本格式 * * * * * command 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天) 命令 第一列表示分钟1~59 每分钟用*或者*/1表示 第二列表示小时1-23 (0表示0点) 第三列表示日期1-31 第四列表示月份1-12 第五列标识号星期0-6(0表示星期天) 第六列要运行的命令 (注意: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 * cmd表示每天的17、18、19的半点执行 |
/n | n表示可以整除的数字,每隔n的单位时间,如每隔10分钟表示/10 * cmd |
每小时执行 * * * * * 分 时 日 月 周 00 * * * * 执行命令的绝对路径 每周执行,每周四的凌晨2点1分执行 1 2 * * 4 执行命令的绝对路径 每月执行,每月的3号的下午2点1分执行 1 14 3 * * 每年执行,每年的4月分3号的凌晨2点1分执行 1 2 3 4 * 每周3和周5的2点1分执行 1 2 * * 3,5 每周六,周日的下午1点和2点的每一分钟都执行 * 13,14 * * 6,0 周一到周五的每天早上9点一只到下午6点的每一个整点(工作日的每隔小时整点) 0 9-18 * * 1-5 每隔10分钟执行一次任务 */10 * * * * 如果没法整除,定时任务则没意义,可以自定制脚本控制频率 定时任务最小单位是分钟,想完成秒级任务,只能通过其他方式(编程语言)