图文详解crond定时任务
第1章crontd的介绍
1.1crond的含义
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
1.2关于任务调度的分类
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
1.系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行:
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。第六至九行表示的含义将在下个小节详细讲述。这里不在多说。
2.用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
1.3使用者权限文件:
文件:/etc/cron.deny
说明:该文件中所列普通用户不允许使用crontab命令
文件:/etc/cron.allow
说明:该文件中所列用户允许使用crontab命令
文件:/var/spool/cron/
说明:所有用户crontab文件存放的目录,以用户名命名
1.4 crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数这里的0或7代表星期日。command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
用表格说明:如下
第2章 关于crond服务
2.1安装crontab:
yum install crontabs
服务操作说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
加入开机自动启动:chkconfig –level 35 crond on
2.2 crontab命令详解
1.命令格式:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
2.命令功能:
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。
3.命令参数:
-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
例:为了防止计划任务被删除,写一个shell每天备份一次
mkdir -p /home/enrnd/crontab_bak 创建目录
touch crontab_bak.sh 创建文件
打开 crontab_bak.sh,添加内容
crontab –l > /home/enrnd/crontab_bak/crontab`date ‘+%Y%m%d’`.txt
创建计划任务
crontab -e ,添加如下内容
0 9 * * * /home/enrnd/crontab_bak/crontab_bak.sh
2.3定时任务的种类:
1.crontab:这个命令可以周期性的执行任务工作,例如:每五分钟做一次服务器时间同步。要执行crontab这个命令,也需要启动一个服务crond才可以,这个crontab命令是在生产工作中最常用到的命令
2.anacron:这个命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作,它会检测服务器停机期间应该执行,但并没有进行的任务工作,并将该命令执行一遍
3.at:适合仅执行一次就结束的调度任务命令,例如:某天晚上需要处理一个任务,仅仅是这一天的晚上,属于突发性的工作任务,要执行at命令,还需要启动一个名为atd的服务才行,工作中很少使用
注:1.我们说的crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令
2.crond服务是企业生产工作中常用的重要服务
3.几乎每个服务器都会用到crond服务
4.系统自动轮询任务的设置配置路径:
ls -l /etc/|grep cron
cd /etc/logrotate.d 把用户创建的定时任务放在此目录下
例:每5分钟让risesmbserver和域服务器的时候做同步
*/5 * * * * /usr/sbin/ntpdate 192.168.0.37 > /dev/null 2>&1
有些运维会把定时任务放在 /etc/crontab目录下,不支持放在此目录下
crontab 编辑的定时任务依赖的服务
chkconfig --list crond 查看是否开机启动
/etc/init.d/crond status 查看服务有没有运行
ps -ef |grep crond|grep -v grep
2.4.举例说明参数的使用说明
例:如何在指定的用户下执行crontab命令
useradd rise #新建rise用户
cd -
crontab -u rise -e #可以编辑文件
2.5.crontab语法格式中特殊符号含义如下并举例说明:
特殊符号:
*:星号,表示任意时间都,实际就是每的意思,例如00 23 * * * cmd表示每月每周每日的23:00都执行cmd任务。如果位上是*就是该位上时间的取值范围,如小时上的*等同于00-23,分上的*等同于00-59
注:定时任务规则如果到小时,口述时就最多提每天
-:减号,表示分隔符,表示一个时间范围,区间段,
如每天的17,18,19点的00分执行任务,00 17-19 * * * cmd
,:逗号,表示分隔时段的意思。
例:每天17,18,19点的半点执行一个rise.sh的脚本命令
30 17,18,19 * * * /bin/sh/scripts/rise.sh
/n:n代表数字,即每隔n单位时间
例:每10分钟执行一次任务
*/10 * * * * cmd
例:每6小时的半刻运行这个命令
30 */6 * * * cmd
30 00-23/6 * * * cmd
2.5 关于crontab的一些实例
例1:每天早点8点到18点,每二小时的半刻运行这个命令
30 8-18/2 * * * cmd
例2:每月的1,10,22号的4点45分重启smb服务器
45 4 1,10,22 * * /etc/init.d/smb restart
例3:晚上23点和早上0点到7点,每隔一小时重新启动smb
00 23,00-07/1 * * * /etc/init.d/smb restart
例4:4月的周一到周三11点重启服务
00 11 * 4 1-3 /etc/init.d/smb restart
例5:制定一个计划任务输出时间,让他每15分钟运行一次
00,15,30,45,08-18 * * * date
例6:每小时的第3和第15分钟执行
3,15 * * * * command
例7:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
例8:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
例9:每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
例10:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
例11:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
例12:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
例13:每天18 : 00至23 : 00之间每隔30分钟重启smb
00,30 18-23 * * * /etc/init.d/smb restart
例14:每星期六的晚上11 : 00 pm重启smb
00 23 * * 6 /etc/init.d/smb restart
例15:每一小时重启smb
00 */1 * * * /etc/init.d/smb restart
例16:晚上11点到早上7点之间,每隔一小时重启smb
00 23-7/1 * * * /etc/init.d/smb restart
例17:每月的4号与每周一到周三的11点重启smb
00 11 4 * mon-wed /etc/init.d/smb restart
例18:一月一号的4点重启smb
00 4 1 * * /etc/init.d/smb restart
例19:每小时执行/etc/cron.hourly目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
说明:
run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了
第3章:企业生产环境中的crontab的使用原则
3.1 生产环境下定时任务的专业写法说明
1:为定时任务规则加必要的注释,写任务时任务规则尽可能的加上注释(最好是英文注释),这是个习惯和规范。最好是什么时间什么人,因为什么事写的定时任务,这样是为了让其他的运维人员可以很容易理解任务的信息,从而提高了工作效率
2:执行定时任务时,如果是执行脚本,请尽量在脚本的签名加上/bin/sh命令,否则有可能忘了为脚本设定执行权限,导致任务无法运行
3:首先在命令行操作成功,然后复制命令到脚本里,在各个细小环节减少出错的机会
4:然后测试脚本,测试成功后,复制脚本的规范路径到定时任务配置里,不要手敲
5:先在测试环境下测试,然后正式环境规范部署
3.2书写定时任务的写法说明
总结:1.为定时任务规则加必要的注释
2.定时任务命令或程序最好写到脚本里执行
3.执行shell脚本任务前加/bin/sh
4.定时任务命令或脚本结尾加>/dev/null 2&1
5.在指定用户下执行相关的定时任务
6.生成任务程序不要随意打印输出信息
tar打包的时候尽量减少使用v,这样就会减少垃圾
7.定时任务执行的脚本要规范路径(绝对路径)
8.配置定时任务规范操作过程
注:1.定时任务能不用root就不要在root下操作
2.>/dev/null 2&1问题
sendmail
/var/spool/clientmqyeue -----邮件的临时队列目录,会产生N个小文件,导致的后果就是把磁盘的inode满
postfix
/var/spool/postfix/maildrop/ 小文件太多造成inode索引使用完解决办法
df -i 可以查看inode使用是否满
3.3工作中调试定时任务的方法:
1.增加执行任务频率调试任务(某些任务不能用于生产环境没有测试机会)
代码发布:个人开发环境---办公测试环境----IDC机房测试环境----IDC正式环境(分组,灰度发布)
2.调整系统时间调试任务(不能直接用于生产环境),保持提前5分钟
3.通过脚本日志输出调试定时任务
4.注意一些任务命令带来的问题
5.注意环境变量导致的定时任务故障(java)
6.通过crond定时任务日志调试定时任务(/var/log/cron)
7.其他的问题调试的办法
3.4 crontab定时任务生产应用问题的8箴言
1.系统环境变量问题
crontab执行shell时只能识别位数不多的系统环境变量,一般用户定义的普通变量无法识别,如果在编写的脚本需要使用这些变量,最好使用export重新申明下该变量脚本才能正常执行。例如:生产情况和Java相关的脚本任务和脚本
2.定时任务要用绝对路径
执行shell,如果使用相对路径,可能出现找不到任务路径的情况
3.脚本权限问题加/bin/sh
4.事件变量问题用反斜线\%转义,最好用脚本
5.>/dev/null 2>&1问题
6.定时任务规则之前加注释
7.使用脚本程序替代命令行定时任务
8.避免不必要的程序及命令输出
9.切换到目标目录的上一级打包目标
10.定时任务脚本中的程序命令尽量要用全路径(和环境变量的识别有关)
3.5关于crontab企业环境下作业题的分析
作业1:每分钟打印一次自己的名字拼音全拼到/server/log自己的名字命名的文件
mkdir -p /server/log/
touch /server/log/lizheng
#print log at 20170401 by lizheng for...
* * * * * echo lizheng >> /server/log/lizheng
作业总结:1.定时任务不要加注释
2.结尾不要有>/dev/null 2>&1(定向到空)
3./server/log目录必须要存在才能出结果
4.定时任务中的路径一定要绝对路径
5.crond服务必须开启才能运行
企业面试题:
1.在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和错误输出到/dev/null设备,请写出crontab中的语句
思路:1.命令行先运行此命令
2.把命令写入脚本内
3.测试脚本的运行
4.创建定时任务把脚本复制到crontab里
vim /server/scripts/execute.sh
#写入命令行
perl /home/shell/collect.pl
/usr/bin/perl /serer/scripts/exectue.sh
crontab -e
15 03 * * 6 /usr/bin/perl /serer/scripts/exectue.sh > /dev/null 2>&1
2.crontab在11月份内,每天的早上6点到12点钟,每隔2小时执行一次/usr/bin/httpd.sh怎么实现
思路:1.命令行先运行此命令
2.把命令写入脚本内
3.测试脚本的运行
4.创建定时任务把脚本复制到crontab里
写入命令行
Vim /usr/bin/httpd.sh
bin/sh /usr/bin/httpd.sh
crontab -e
00 06-12/2 * 11 * /bin/sh /usr/bin/httpd.sh > /dev/null 2>&1
附录:crontab书写和排错流程的图文详解
转载于:https://blog.51cto.com/11937277/1913098
图文详解crond定时任务相关推荐
- 全网最全的Windows下Anaconda2 / Anaconda3里Python语言实现定时发送微信消息给好友或群里(图文详解)...
不多说,直接上干货! 缘由: (1)最近看到情侣零点送祝福,感觉还是很浪漫的事情,相信有很多人熬夜为了给爱的人送上零点祝福,但是有时等着等着就睡着了或者时间并不是卡的那么准就有点强迫症了,这是也许程序 ...
- 面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了
大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis--不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的NoSQL数据库. ...
- postman使用实践教程图文详解
postman 使用实践教程图文详解 1.环境变量设置 1.1切换环境变量 1.2查看当前的环境变量和全局变量 1.3编辑环境变量和全局变量 2.postman前置脚本动态传参 2.1递增传参 2.1 ...
- 广联达2018模板算量步骤_老师傅带你学造价,广联达GTJ2018图文详解,小白也能学会的软件...
在GTJ2018问世之前,土建造价人员有三个软件是必会的,一个是GGJ主打钢筋算量,一个是GCL主打土建算量,还有一个是GBQ主要是套定额用来计价的软件. 那时候如果计算一个工程的工程量,首先要用GG ...
- 计算机刷新的作用,图文详解Win8重置和刷新功能:超强自我治愈
直接自愈,Windows8出故障之后,伴随着重置和刷新两大新功能,世上无难事了啊.微软Windows8团队今日在官方博客详细向用户解释Win8的重置和刷新PC功能,将可一键复位系统到最佳状态.视频演示 ...
- 计算机网络管理的常用命令,网络管理常用命令图文详解.pdf
网络工程师必备 – 网络管理常用命令图文详解 网络工程师必备 网络管理常用命令 图文详解 V1.0 V1.0 包含 ping.ipconfig.netstat.nbtstat.tracert. pat ...
- SSL之CA证书颁发机构安装图文详解
上一节我们说到,在验证公钥安全性时,是在CA机构颁发的包含用户的公钥及其身份信息的数字证书,数字证书由权威机构--CA签发.这个CA权威机构可以是自己的服务器也可以是国际公认的CA权威机构.下面我就来 ...
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- x264代码剖析(一):图文详解x264在Windows平台上的搭建
x264代码剖析(一):图文详解x264在Windows平台上的搭建 X264源码下载地址:http://ftp.videolan.org/pub/videolan/x264/ 平台:win7 PC. ...
最新文章
- 小孩都看得懂的YOLO!
- DELL 14R(n4010)改XP的驱动方法(转)
- 音视频技术开发周刊 61期
- C++中输入一组数字 以换行符结束输入
- 引擎优化的facebook中文网
- linux查看nec进程状态,【linux】 /proc/PID/stat
- 华为在剑桥建芯片厂;小米公布出货量反驳调研机构; 中移动否认限制号 | 极客头条...
- 【图解】虚拟机下载安装以及Linux操作系统的配置CentOS安装
- hdu 4599 Dice
- 破解还原卡的方法总结
- BroadcastReceiver启动Service 3.1之后静态注册
- elastic APM针对java应用的高阶用法(java agent)
- 数学笔记10——拉格朗日中值定理
- iio Engine 1
- 芯片解密什么是物联网芯片,与普通芯片有什么不同?
- python网络设备巡检(异常自动报警)_常用网络设备巡检命令参考(四)
- 极路由 安装php,极路由1S刷潘多拉安装优酷路由宝插件
- C/C++:实现精灵游戏
- iOS NSDate与NSTimeInterval之间的互转
- 浅析微信小程序生命周期之应用生命周期
热门文章
- linux运维之道入门,Linux运维之道之网络基础学习1.2
- SQL语言——联结表
- 仿滴滴打车地图选点(包含地图选点,离线地图,导航路线)
- WGCNA算法研究笔记
- wps 文字删除 多个空行
- python-闰年判断
- npm install 报错(npm ERR! errno: -4048, npm ERR! code: ‘EPERM‘, npm ERR! syscall: ‘unlink‘,)解决方法
- 网络银行转帐落到后台的交易有哪些
- 爬虫js逆向获取信息,有道翻译逆向{‘errorCode‘: 50}及UA错误
- Python web应用程序