第十一节 linux定时任务
标签(空格分隔): Linux实战教学笔记linux
---更多资料点我查看数据库
1.1 定时任务Crond介绍
Crond是linux系统中用来按期执行命令/脚本或指定程序任务的一种服务或软件,通常状况下,咱们安装完Centos5/6 linux操做系统以后,默认便会启动Crond任务调度服务,在咱们前面的系统安装及开机启动优化的设置中,咱们也设置保留了Crond开机自启动,Crond服务会按期(默认每分钟检查一次)检查系统中是否有要执行的任务工做,若是有,便会根据其预先设定的定时任务规则自动执行该定时任务工做,这个crond定时任务服务就至关于咱们平时早起使用的闹钟同样。vim
1.2 开始作linux开机自启动服务优化
必须最低保留的启动服务:windows
crond:定时任务服务
network:网络服务
rsyslog:日志服务
sshd:远程连接服务
sysstat:系统监控服务(涉及一系列监控工具)缓存
1.2.1小结
- 经常使用服务,必须开机启动的服务crond,sshd,network,rsyslog,sysstat
- 命令拼接(awk/sed)==>品良==>循环
1.2.2 为何要使用Crond定时任务?
- 为何要使用定时任务呢?
- 咱们举个例子说明:例如,咱们的数据库或者代码程序须要天天晚上0点作一次全备份,这样天天夜里都须要执行的周期性工做,若是要让人操做的话,就得天天半夜爬起来,而后登陆系统执行任务,执行完接着睡觉。另外,执行任务的过程也可能持续几个小时,这样一来,一个晚上咱们就都不用睡觉了,这样显然是不行的。那么有什么办法来解决这个周期性的执行任务需求呢?
- 这就是linux系统的定时任务Crond,这至关于咱们平时生活中的闹钟功能,天天晚上提早设置定时,早晨按时叫醒你。
1.2.3 linux系统的定时任务
linux系统中定时任务调度的工做能够分为如下两种状况:
一,linux系统自身按期执行的任务工做:系统周期性自行执行的任务工做,如轮询系统日志,备份系统数据,清理系统缓存等,这些任务无需咱们人为干预。ruby
[root@chensiqi1 ~]# ls -l /var/log/messages* #系统的日志 -rw-------. 1 root root 4680 Feb 4 07:41 /var/log/messages -rw-------. 1 root root 191470 Dec 25 05:44 /var/log/messages-20161225 -rw-------. 1 root root 1492005 Jan 2 06:51 /var/log/messages-20170102 -rw-------. 1 root root 633737 Jan 8 08:02 /var/log/messages-20170108 -rw-------. 1 root root 1594144 Feb 4 04:25 /var/log/messages-20170204 [root@chensiqi1 ~]#
[root@chensiqi1 ~]# ls -l /var/log/secure* #用户登陆日志 -rw-------. 1 root root 872 Feb 4 07:13 /var/log/secure -rw-------. 1 root root 5254 Dec 25 05:44 /var/log/secure-20161225 -rw-------. 1 root root 64822 Jan 2 06:27 /var/log/secure-20170102 -rw-------. 1 root root 14187 Jan 8 07:22 /var/log/secure-20170108 -rw-------. 1 root root 13540 Jan 12 00:17 /var/log/secure-20170204 [root@chensiqi1 ~]#
二,用户执行的任务工做:某个用户或系统管理员按期要作的任务工做,例如每隔5分钟和互联网上时间服务器进行时间同步(这是安装系统基础优化部分的内容),天天晚上0点备份网站站点数据及数据库数据,通常这些工做须要由每一个运维自行设置才行。服务器
例如:服务器时间同步markdown
[root@chensiqi1 ~]# crontab -l */5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1 [root@chensiqi1 ~]#
用户执行的任务工做,也就是咱们运维管理人员执行的任务工做,所以,这个用户执行的任务是咱们今天讨论的重点网络
1.2.4 linux系统下定时任务软件的种类
严格的说,linux系统下的定时任务软件还真很多,例如:at,crontab,anacron
假如:某天晚上须要处理一个任务,仅仅是这一天的晚上,属于突发性的工做任务。要执行at命令,还须要启动一个名为atd的服务才行,在实际工做中,还真没碰到须要用到它的时候。所以,建议你们不要深刻研究了,到此咱们讲解到这里为止便可。运维
- crontab(命令):正如前面所说的这个命令能够周期性的执行任务工做,例如:每五分钟作一次服务器时间同步。要执行crontab这个命令,也须要启动一个服务crond才行,这个crontab命令是生产工做中最经常使用到的命令,请你们务必掌握。
1,开机自启动crond服务
[root@chensiqi1 ~]# chkconfig --list | grep crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@chensiqi1 ~]#
2,此时此刻服务的状态(查看,开启,关闭)
[root@chensiqi1 ~]# /etc/init.d/crond status crond (pid 1139) is running... [root@chensiqi1 ~]#
/etc/init.d 服务启动命令(脚本)
3,如何查看进程
ps -ef | grep crond
- anacron:这个命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工做,而是以天为周期或者在系统每次开机后执行的任务工做。
它会检测服务器停机期间应该执行,可是并无进行的任务工做,并将该任务执行一遍。
小结提示:
1,咱们所说的crond服务是运行的程序,而crontab是用来管理用户的定时任务(规则)的命令
2,crond服务是企业生产工做中经常使用的重要服务,at和anacron不多用,能够忽略
3,几乎每一个服务器都会用到crond服务
4,上千服务器能够开发分布式定时任务项目方案(批量管理ansible/saltstack)
1.3 定时任务Crond使用说明
1.3.1 指令语法
crontab [-u user] { -l | -e | -r | -i }
查看系统帮助
man crontab
[root@chensiqi1 ~]# crontab --help crontab: invalid option -- '-' crontab: usage error: unrecognized option usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -s (selinux context) [root@chensiqi1 ~]#
crontab -l 查看当前用户的定时任务配置
[root@chensiqi1 ~]# crontab -l */5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
crontab -e 进入当前用户的定时任务vim编辑模式
crontab -u 用户名 -l 查看指定用户的定时任务设置
[root@chensiqi1 ~]# crontab -u root -l */5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1 [root@chensiqi1 ~]# crontab -u chensiqi -l no crontab for chensiqi
1.3.2 指令说明
经过crontab咱们能够在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位能够是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)。crond服务经过crontab命令能够很容易的实现周期性的日志分析或数据备份等企业运维场景工做
1.3.3 使用者权限及定时任务文件
文件 | 说明 |
---|---|
/etc/cron.deny(拒绝) | 该文件中所列用户不容许使用crontab |
/etc/cron.allow(容许) | 该文件优先级高于cron.deny(默认不存在,通常不用) |
/var/spool/cron/ | 全部用户crontab配置文件默认都存在此目录,文件名以用户名命名 |
[root@chensiqi1 ~]# cat /etc/cron.deny chensiqi [root@chensiqi1 ~]# su - chensiqi [chensiqi@chensiqi1 ~]$ crontab -l You (chensiqi) are not allowed to use this program (crontab) See crontab(1) for more information [chensiqi@chensiqi1 ~]$ crontab -e You (chensiqi) are not allowed to use this program (crontab) See crontab(1) for more information
[root@chensiqi1 ~]# ls /var/spool/cron/ root #默认是没有的,只有建立了定时任务才有 [root@chensiqi1 ~]# cat /var/spool/cron/root */5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
1.3.4 指令选项说明含义表
参数 | 含义 |
---|---|
-l(字母) | 查看crontab文件内容 |
-e | 编辑crontab文件内容 |
-r | 删除crontab文件内容(用的不多) |
-u user | 指定使用的用户执行任务 |
特别强调:-r参数在生产中不多用,没什么特殊需求必需要用-e进入编辑便可
补充:
crontab { -l | -e } 实际上就是在操做/var/spool/cron/当前用户这样的文件
使用crontab命令的优势:
1,crontab能够检查语法
2,输入方便
1.3.5 定时任务指令的使用格式
默认状况下,当用户创建定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登陆的用户名一致,如:root用户的定时任务配置文件为/var/spool/cron/root
Crontab定时任务的书写格式很简单,用户的定时任务规则通常分为6个段(每一个段经过空格来分隔,系统的定时任务为/etc/crontab,分为7个段,空格来分隔),前五段为时间的设定段,第六段为所要执行的命令或脚本任务段
用户定时任务实例:
01 * * * * cmd #每小时的01分钟执行
02 04 * * * cmd #天天4点的02分钟执行
22 14 * * 00 cmd #每周日的14点22分执行
42 04 01 * * cmd #每个月1日的4点42分执行
提示:
1,cmd为要执行的命令或脚本,例如:/bin/sh /server/scripts/chensiqi.sh
2,每一个列之间必需要有一个空格。多个空格能够么?本身实践
1.3.6 crontab 语法格式中时间段的含义以下表
段 | 含义 |
---|---|
第一段 | 表明分钟 |
第二段 | 表明小时 |
第三段 | 表明日,天 |
第四段 | 表明月份 |
第五段 | 表明星期,周几 |
提示:时间记忆口诀:分时日月周。取值范围记忆:正常日期时间范围,小学生都会的了
1.3.7 crontab 语法格式中特殊符号含义以下表
特殊符号 | 含义 |
---|---|
* | *号,表示任意时间都,实际就是“每”的意思 |
- | 减号表示分隔符,表示一个时间范围,区间段,如17-19点,例如:天天的17,18,19点的00分执行任务。00 17-19 * * * cmd |
, | 逗号,表示分隔时段的意思例如天天的5点10点00分执行任务,00 5,10 * * * cmd |
/n | n表明数字,即“每隔n单位时间”,例如:每10分钟执行一次任务能够写成/10 * * * cmd,其中,/10,的范围是0-59,所以也能够写成0-59/10 |
1.3.8 学习画图来表达说明(亿图)
强调:这是学习态度的体现,这种态度极其重要,不要单纯理解技术,多结合画图,案例理解原理,记一次好久都忘不掉。
要学好linux运维请从排版画图开始