设为首页 收藏本站
查看: 1337|回复: 0

[经验分享] Linux(centos7)定时任务<一>

[复制链接]

尚未签到

发表于 2018-4-19 15:51:32 | 显示全部楼层 |阅读模式
1.定时任务crond介绍
1.1 crond是什么
crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。
特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。


1.2 为什么要使用crond定时任务
linux系统的定时任务crond,相当于我们平时生活中的闹钟的功能。可以满足周期性执行任务的需求。


1.3 不同系统的定时任务和种类

1.3.1 windows 7 系统的定时任务
开始→所有程序→附件→系统工具→选择任务计划程序


1.3.2 linux系统的定时任务
linux系统中定时任务调度的工作可以分为以下两个情况:
① linux系统自身定期执行的任务工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等。
centos5.X例:
[root@CentOS5 log]# ll messages*
-rw------- 1 root root 372258 Mar 14 20:48 messages
-rw------- 1 root root 349535 Nov 11 18:13 messages.1
提示:centos 6.4日志轮询结尾是按时间了。
centos6.X例:
[root@CentOS6 log]# ll messages*
-rw------- 1 root root  1591 3月  25 21:57 messages
-rw------- 1 root root 78304 3月   3 20:40 messages-20140303
-rw------- 1 root root 78050 3月   8 19:42 messages-20140311
-rw------- 1 root root   745 3月  18 00:46 messages-20140318
-rw------- 1 root root 77232 3月  22 21:20 messages-20140325

② 用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,例如每隔5分钟和互联网上时间服务器进行时间同步,每天晚上0点备份站点数据及数据库数据,一般这些工作需要由每个用户自行设置才行。
例:
[root@CentOS6 log]# crontab -l
#time sync by lee at 2014-1-14
*/5 * * * * /usr/sbin/ntpdate  time.windows.com >/dev/null  2>&1

2.定时任务crond使用说明
[root@CentOS6 log]# crontab --help
crontab:无效选项 -- -
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)

2.1 指令说明
通过crontab我们可以在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)


2.2 使用者权限及定时任务文件
文件

说明

/etc/cron.deny
该文件中所列用户不允许使用crontab命令。
/etc/cron.allow
该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny
/var/spool/cron
所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名。


2.3 指令选项说明表
参数

含义

指定示例

-l(字母)
查看crontab文件内容
crontab -l
-e
编辑crontab文件内容
crontab -e
-i
删除crontab文件内容,删除前会提示确认
crontab -ri
-r
删除crontab文件内容
crontab -r
-u user
指定使用的用户执行任务
crontab -u lee -l
提示:crontab{-l |-e}实际上就是在操作/var/spool/cron/当前用户这样的文件。
注:
crontab -e
/var/spool/cron/root
前者会检查语法,而后者不会。
visudo
/etc/sudoers
前者会检查语法,而后者不会。

2.4指令的使用格式
默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致。如:root用户的定时任务配置文件为/var/spool/cron/root。
crontab用户的定时任务一般分为6段(空格分隔,系统的定时任务则/etc/crontab分为7段),其中前五段位时间设定段,第六段为所要执行的命令或脚本任务段


2.4.1 crontab基本格式
* * * * * cmd
提示:
① cmd为要执行的命令或脚本,例如/bin/sh  /server/scripts/lee.sh.
② 每个段之间必须要有空格。


2.4.2 crontab语法格式中时间段的含义表

含义

取值范围

第一段
代表分钟
00-59
第二段
代表小时
00-23
第三段
代表日期
01-31
第四段
代表月份
01-12
第五段
代表星期
0-7(0和7都代表星期日)


2.4.3 crontab语法格式中特殊符号的含义表
特殊符号

含义

*

*号表示任意时间都,就是“每”的意思,举例:如00 01 * * * cmd表示每月每周每日的凌晨1点执行cmd任务。
-

减号,表示分隔符,表示一个时间范围段,如17-19点,每小时的00分执行任务。00 17-19 * * * cmd。就是17,18,19点整点分别执行的意思。

逗号,表示分隔时间段的意思。30 17,18,19 * * * cmd 表示每天17,18,19点的半点执行cmd。也可以和“-”结合使用,如: 30 3-5,17-19 * * * cmd
/n   

n代表数字,即每隔n单位时间,例如:每10分钟执行一次任务可以写 */10 * * * * cmd,其中 */10,*的范围是0-59,也可以写成0-59/10

3.书写crond定时任务7个基本要领
3.1 为定时任务规则加必要的注释
加了注释,就知道定时任务运行的是什么作业,以防以后作业混乱。这是个好习惯和规范。
[root@angelT ~]# crontab -l
#time sync by lee at 2014-1-14
*/5 * * * * /usr/sbin/ntpdate  time.windows.com >/dev/null  2>&1

3.2 定时任务命令或程序最好写到脚本里执行
[root@angelT ~]# crontab -l
#backup www to /backup
00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1

3.3定时任务执行的脚本要规范路径,如:/server/scripts
[root@angelT ~]# crontab -l
#backup www to /backup
00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1

3.4执行shell脚本任务时前加/bin/sh
执行定时任务时,如果是执行脚本,尽量在脚本前面带上/bin/sh命名,否则有可能因为忘了为脚本设定执行权限,从而无法完成任务。
[root@angelT ~]# crontab -l
#backup www to /backup
00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1

3.5 定时任务结尾加 >/dev/null 2>&1
[root@angelT ~]# crontab -l
#backup www to /backup
00 00 * * * /bin/sh /server/scripts/www_bak.sh >/dev/null  2>&1


3.5.1 有关/dev/null的说明
/dev/null为特殊的字符设备文件,表示黑洞设备或空设备。
[root@angelT ~]# ll /dev/null
crw-rw-rw- 1 root root 1, 3 3月  26 01:10 /dev/null


3.5.2 有关重定向的说明
>或1>   输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。
>>或1>>追加重定向:把前面输出的东西追加到后边的文件中,不会删除文件原有内容。
<或<0   输入重定向:输入重定向用于改变命令的输入,指定输入内容,后跟文件名。
<<或<<0输入重定向:后跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入。
2>       错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。
2>>     错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。
标准输入(stdin):代码为0,使用<或<<。
标准输出(stdout):代码为1,使用>或>>。正常的输出。
标准错误输出(sederr):代码为2,使用2>或2>>。
特殊:
2>&1就是把标准错误重定向到标准输出(>&)。
>/dev/null 2>&1 等价于 1>/dev/null  2>/dev/null


3.5.3 >/dev/null 2>&1的作用
如果定时任务规范结尾不加 >/dev/null 2>&1,很容易导致硬盘inode空间被占满,从而系统服务不正常var/spool/clientmqueue邮件临时队列目录,垃圾文件存放于此,如果是centos 6.4系统,默认不装sendmail服务,所以不会有这个目录。

3.6 在指定用户下执行相关定时任务
这里要特别注意不同用户的环境变量问题,如果是调用了系统环境变量/etc/profile,最好在程序脚本中将用到的环境变量重新export下。

3.7生产任务程序不要随意打印输出信息
在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果确实需要输出日志,可定向到日志文件里,避免产生系统垃圾。

配置定时任务规范操作过程
①首先要在命令行操作成功,然后复制成功的命令到脚本里,在各个细小环境减少出错的机会。
②然后测试小本,测试成功后,复制脚本的规范路径到定时任务配置里,不要手敲。
③先在测试环境下测试,然后正式环境规范部署。

4.生产场景如何调试crond定时任务
规范的公司开发和运维人员操作流程:个人的开发配置环境-->办公室的测试环境-->idc机房的测试环境-->idc机房的正式环境。
4.1 增加执行频率调试任务
在调试时,把任务执行频率调快一点,看能不能正常执行,如果正常,那就没问题了,再改成需要的任务的执行时间。
注意:有些任务时不允许频繁执行的,例如:定时往数据库里插入数据,这样的任务要在测试机上测试好,然后正式线上出问题的机会就少了。

4.2调整系统时间调试任务
用正确的执行任务的时间,设置完成后,可以修改下系统当前时间,改成任务执行时间的前几分钟来测试(或者重启定时任务服务)


4.3通过日志输出调试定时任务
在脚本中加入日志输出,然后把输出打到指定的日志中,然后观察日志内容的结果,看是否正确执行。


4.4注意一些任务命令带来的问题
注意: * * * * * echo ==>>/tmp/lee.log >/dev/null 2>&1 这里隐藏的无法正确执行的任务配置,原因是前面多了>>,或者去掉结尾的 >/dev/null 2>&1。


4.5 注意环境变量导致的定时任务故障
例如:在调试java程序任务的时候,注意环境变量,把环境变量的定义加到脚本里。


4.6通过定时任务日志调试定时任务
[root@angelT ~]# tail -f /var/log/cron
Mar 26 15:55:01 angelT CROND[3415]: (ida) CMD (/usr/sbin/ntpdate time.windows.com >/dev/null 2>&1)
Mar 26 15:55:01 angelT CROND[3416]: (root) CMD (/usr/sbin/ntpdate  time.windows.com >/dev/null  2>&1)
Mar 26 16:00:01 angelT CROND[3422]: (root) CMD (/usr/sbin/ntpdate  time.windows.com >/dev/null  2>&1)
Mar 26 16:00:01 angelT CROND[3423]: (root) CMD (/usr/lib64/sa/sa1 1 1)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-449158-1-1.html 上篇帖子: centos 邮箱报警 下篇帖子: linux(centos7)中systemctl命令的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表