crond是linux系统中用来定期实行命令或指定程序的一种做事或软件。
分外哀求:(秒级别)crond做事就无法搞定了,一样平常事情中写脚本用守护进程实行
[root@shellbiancheng jiaobenlianxi]# cat while1.sh #!/bin/shwhile true do uptime sleep 2 done
1.2 linux系统crond的定时任务
(1)linux系统自身定期实行的任务操作,如轮询系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。例如:
[root@linzhongniao ~]# ls -l /var/log/messages -rw-------. 1 root root 206776 Aug 2 17:43 /var/log/messages -rw-------. 1 root root 448307 Jul 8 08:54 /var/log/messages-20180708 -rw-------. 1 root root 742560 Jul 16 04:05 /var/log/messages-20180716 -rw-------. 1 root root 1293433 Jul 22 15:15 /var/log/messages-20180722 -rw-------. 1 root root 622193 Jul 30 20:14 /var/log/messages-20180730[root@linzhongniao ~]# ll /etc/|grep cron -rw-------. 1 root root541 Aug 24 2016 anacrontabdrwxr-xr-x. 2 root root 4096 Jul 16 14:19 cron.ddrwxr-xr-x. 2 root root 4096 Jul 16 14:18 cron.daily -rw-------. 1 root root 0 Aug 24 2016 cron.denydrwxr-xr-x. 2 root root 4096 Jul 16 14:19 cron.hourlydrwxr-xr-x. 2 root root 4096 Jun 14 05:01 cron.monthly -rw-r--r--. 1 root root457 Sep 27 2011 crontabdrwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.weekly
2)用户实行的任务操作:某个用户或系统管理员定期要做的任务事情,例如每隔5分钟和互联网上韶光做事器进行同步,每天晚上0点备份站点数据及数据库数据,一样平常这些事情须要由每个用户自行设置才行。
用户实行的任务事情,也便是运维管理员实行的任务事情,因此这个用户实行的任务是我们的重点。
1.3 linux系统下定时任务软件种类
linux系统下的定时任务还真不少,例如:at,crontab,anacron
at:适宜仅实行一次就结束的调度任务命令,例如:某天晚上须要处理一个任务,仅仅是这一天的晚上,属于突发性任务,要实行at命令,还须要启动atd的做事才行
[root@linzhongniao ~]# chkconfig --list|grep atdatd 0:off 1:off 2:off 3:off 4:off 5:off 6:off[root@linzhongniao ~]# chkconfig --list atdatd 0:off 1:off 2:off 3:off 4:off 5:off 6:off2.定时任务利用解释
[root@linzhongniao ~]# crontab --helpcrontab: invalid option -- '-'crontab: usage error: unrecognized optionusage: crontab [-u user] filecrontab [-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) 《==在删除用户的crontab之条件醒 -s (selinux context)
命令格式
crontab –u (指定用户默认是root)-[e|l|r]
2.1 指令解释
通过crontab我们可以在固定的韶光实行指定的系统指令或script脚本。韶光间隔的单位是分钟,小时,日,月,周及以上的任意组合(把稳:日和周不要组合)。
2.2 利用者权限及定时任务文件
2.3 指令选项解释表
2.4 指令的利用格式
用户所建立的crontab文件存于/var/spool/cron中如:root用户的定时任务配置文件为/var/spool/cron/root。
crontab用户的定时任务一样平常分为6段空格分隔。系统的定时任务则/etc/crontab分为7段,前5段为韶光设定段,第六段以哪个用户实行crontab,第七段为所要实行的命令段如下
01 root run-parts /etc/cron.hourly02 4 root run-parts /etc/cron.daily22 4 0 root run-parts /etc/cron.weekly42 4 1 root run-parts /etc/cron.monthly
系统的crontab文件是/etc/crontab
[root@linzhongniao ~]# cat /etc/crontab SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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 分 时 日 月 周 用户 任务
2.5 crontab语法格式中韶光段得含义
提示:末了一次实行任务的韶光是23:30
2.6 crontab语法格式中分外符号含义
2.7 开启定时任务做事
[root@linzhongniao ~]# chkconfig --list crondcrond 0:off 1:off 2:on3:on4:on5:on6:off[root@linzhongniao ~]# /etc/init.d/crond statuscrond (pid 1837) is running...[root@linzhongniao ~]# ps -ef|grep crond|grep -v greproot 1837 1 0 21:58 ?00:00:00 crond[root@linzhongniao ~]# /etc/init.d/crond restartStopping crond: [ OK ]Starting crond:[ OK ]
2.8 编辑定时任务把稳事变
(1)编辑定时任务分钟位上必须用00格式表示
例如,6月3日上午9:00去培训,规则为
00 09 03 06
(2)周和日不能同时利用
强调周和日只管即便不要同时用,否则可能达不到想要的效果
例如:
每周日上午9:30去上课
30 09 7或者 30 09 0
2.9 做事器韶光同步
(1)手动同步韶光
[root@linzhongniao ~]# dateSat Aug 4 12:08:20 CST 2018[root@linzhongniao ~]# date -s \"大众23:00\"大众Sat Aug 4 23:00:00 CST 2018[root@linzhongniao ~]# dateSat Aug 4 23:00:03 CST 2018[root@linzhongniao ~]# which ntpdate/usr/sbin/ntpdate[root@linzhongniao ~]# /usr/sbin/ntpdate ntp1.aliyun.com 4 Aug 12:10:21 ntpdate[1700]: step time server 52.163.118.68 offset -39052.961525 sec[root@linzhongniao ~]# dateSat Aug 4 12:10:30 CST 2018
(2)用定时任务自动同步
[root@linzhongniao ~]# crontab -l#sync sys time by linzhongniao at 2018-08-04 /2 /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1[root@linzhongniao ~]# /etc/init.d/crond restartStopping crond: [ OK ]Starting crond:[ OK ][root@linzhongniao ~]# date -s \"大众23:00\"大众Sat Aug 4 23:00:00 CST 2018[root@linzhongniao ~]# dateSat Aug 4 23:00:06 CST 2018[root@linzhongniao ~]# dateSat Aug 4 12:21:53 CST 2018
机器少还可以和互联网上韶光同步,如果有很多做事器,可以搭建一个内部的韶光同步做事器ntp server。
提示:如果不加“>/dev/null 2>&1”会因产生垃圾文件导致磁盘inode耗尽的问题。
3.生产环境crontab专业案例每天晚上12点打包站点目录/var/www/html备份到/data目录下(最好每次按韶光天生不同的备份包)
[root@linzhongniao scripts]# cat httpd.sh#!/bin/bashcd /var/www/tar zcfp /data/html_$(date +%Y%m%d%H%M).tar.gz ./html[root@linzhongniao scripts]# crontab -l|tail -2#tar /var/www/html by shell scripts by linzhongniao at 20180800 00 /bin/bash /server/scripts/httpd.sh >/dev/null 2>&14.书写定时任务5个基本办法
4.1 为定时任务规则加必要的注释
加必要注释,写定时任务规则时尽可能加上注释(最好是英文注释),这是个好的习气。
4.2 实行脚本任务前加/bin/sh
实行定时任务时,如果是实行脚本,请只管即便在脚本前面加上/bin/sh命令,否则有可能忘了给脚本加实行权限,而无法完成任务。
4.3 在指定用户下实行干系的定时任务
须要root权限实行的任务可以登录到root用户下然后设置,如果不须要root权限,可以登录到普通用户下(也可以直接在root下crontab –u linzhongniao –e的写法直接设置)
切换到linzhongniao用户
[linzhongniao@linzhongniao ~]$ whoamilinzhongniao[linzhongniao@linzhongniao ~]$ crontab -l /bin/sh tar.sh
不切换用户直接查看定时任务
[root@linzhongniao ~]# crontab -u linzhongniao -l /bin/sh tar.sh
看一下crond用户的配置文件
[root@linzhongniao ~]# ll /var/spool/cron/total 8 -rw-------. 1 root root 25 Aug 4 14:25 linzhongniao -rw-------. 1 root root 222 Aug 4 2018 root
平时事情中只管即便多用crontab –e和crontab –l去编辑和查看定时任务,由于会有语法缺点检讨。
如果给1000台做事器同时添加系统韶光实时同步,不可能一个一个改,此时就须要批量分发工具或批量运维脚本。
4.4 定时任务结尾加>/dev/null 2>&1
/dev/null是分外的设备,表示黑洞设备或空设备;2>&1表示标准缺点输出和标准输出的输出的路径都一样。>/dev/null 2>&1相称于1>/dev/null,2>/dev/null
5.系统定时任务配置文件/etc/crontab系统定时任务分七段,如果某一台做事器上的用crontab –l查看没有定时任务,就上系统定时任务里面用cat查看。
[root@linzhongniao ~]# cat /etc/crontab SHELL=/bin/bash shell阐明器PATH=/sbin:/bin:/usr/sbin:/usr/bin PATH变量MAILTO=root 定义如果任务有输出,发给哪个用户默认是root用户HOME=/# 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 分 时 日 月 周 用户 脚本
通过run-parts使得系统可以定时实行目录下的所有可实行文件
按周实行的配置文件
[root@linzhongniao ~]# tree /etc/cron.weekly/etc/cron.weekly0 directories, 0 files
按天实行的配置文件
[root@linzhongniao ~]# ll /etc/cron.daily/total 24 -rwx------. 1 root root 180 Jul 10 2003 logrotate -rwx------. 1 root root 927 Mar 22 2017 makewhatis.cron -rwx------. 1 root root 189 Jan 26 2015 mlocate.cron -rwxr-xr-x. 1 root root 2126 Jul 19 2013 prelink -rwxr-xr-x. 1 root root 563 Nov 23 2013 readahead.cron -rwxr-xr-x. 1 root root 433 Nov 7 2015 tmpwatch6.生产场景如何调试crontab定时任务
6.1 增加实行频率调试任务
在调试时,把任务实行频率调快一些。如:每分钟、每5分钟实行一次,或者比当前韶光推迟5分钟往后或者每2钟实行。按己想象的去实行了,如果没问题再改成须要的任务实行的韶光。
强调:有些任务是不许可频繁实行的,例如:定时往数据库里插入数据,这样的任务在测试机上测试好,然后正式线上涌现问题的机会就少了。
6.2 调度系统韶光调适任务
用精确的实行任务的韶光。设置完成后,可以修正下当前韶光,改成任务实行韶光的前几分钟来测试(或者重启定时任务做事)如:定时任务9:00实行,我们可以把系统韶光改成8:55分,然后不雅观察是不是精确实行了,当前韶光要比任务韶光提前足够长,只在测试做事器上操作,如果生产做事器不要这样处理。
6.3 通过日志输出调试定时任务
在脚本中加入日志输出,然后把输出打到指定的日志中,然后不雅观察日志内容结果。看是否实行或精确实行,或向下面的内容把脚本结果重定向到一个log文件里。比如 tar zcvf命令加-v参数,在把输出放到日志里面,通过日志就可以查看脚本有没有实行。
/2 /usr/sbin/ntpdate time.windows.com >>/app/ntpdate.log
6.4 把稳一些任务实行带来的问题
/1 echo “==”>>/tmp/oldboy.log >/dev/null 2>&1
这是暗藏的无法实行的任务配置,缘故原由是前面多了一个>>/tmp/oldboy.log,或者去掉>/dev/null 2>&1。
6.5 把稳环境变量导致的定时任务故障
在调试java程序的时候,把稳环境变量,要把环境变量的定义追加到脚本里,重新export一下。一样平常都放在全局变量/etc/profile里面,但是用定时任务实行脚本还须要重新加载一下环境变量。
export PATH=\"大众/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin\"大众
6.6 通过定时任务日志/var/log/cron调试定时任务
[root@linzhongniao app]# tail -f /var/log/cronAug 5 11:01:01 localhost run-parts(/etc/cron.hourly)[2054]: starting 0anacronAug 5 11:01:02 localhost anacron[2068]: Anacron started on 2018-08-05Aug 5 11:01:02 localhost run-parts(/etc/cron.hourly)[2070]: finished 0anacronAug 5 11:01:02 localhost anacron[2068]: Will run job `cron.daily' in 34 min.Aug 5 11:01:02 localhost anacron[2068]: Jobs will be executed sequentiallyAug 5 11:02:01 localhost CROND[2075]: (root) CMD (/usr/sbin/ntpdate time.windows.com >/app/ntpdate.log)7.生产定时任务把稳事变
7.1 export变量问题
crontab实行shell时只能识别不多的系统环境变量,普通变量是无法识别的。如果在编写的脚本中须要利用变量,最好利用export重新声明一下该变量,脚本才能正常实行。例如生产中和java干系的做事任务和脚本。也可以在脚本中添加PATH环境变量加完PATH环境变量就不用写实行命令全路径了。例如下面的/bin/tar,就可以不写了。
[root@linzhongniao ~]# cat /server/scripts/tar.sh#!/bin/bashexport PATH=\公众/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin\公众cd /server//bin/tar zcf backup_$(date +%Y%m%d%H%M).tar.gz ./scripts
7.2 任务路径问题
一定要用绝对路径不要用相对路径。推举定时实行脚本。
7.3 脚本权限问题
要加/bin/sh实行,也可以不在定时任务中用/bin/sh就要给脚本可实行权限。
7.4 韶光变量问题
“%”百分号在crontab任务中认为是newline,须要用“\”转义。crontab任务命令中,如果有“date +%Y%m%d%H%M”(或date +%Y-%m-%d-%H:%M),必须更换为“date +\%Y\%m\%d\%H\%M”,但写在脚本中的“%”百分号就不须要转义了。
7.5 定时任务加注释
写定时任务要加上注释如:什么人,什么韶光,由于谁,做了什么事都要标记清楚如谁与2018-08-01日在http做事器上做了10分钟同步的操作。
7.6 利用脚本程序替代命令
利用脚本实行任务可以减少缺点,提升效率,规范,是个好习气。
7.7 定时任务脚本的问题
定时任务脚本中的程序命令只管即便用全路径。
8.生产环境定时任务重现生产no space left企业inode被填满的企业案例
问题:修正用户密码和添加用户时涌现下面缺点,但是用df –h创造磁盘没满,叨教为什么?
1、修正密码时报错 passwd: Authentication token manipulation error 2、添加用户报错:unable to lock password file
剖析思路:查看/etc/passwd和/etc/shadow的文件权限没有问题,再利用命令strace -f passwd 追踪剖析缘故原由,看到关键报错信息:“No space left on device”。末了用df -hi查看创造根分区的inode满了。
办理办法:
(1 打开邮件做事,打开邮件做事就把邮件目录清空了不要直接删除文件,生产环境邮件做事是不开的。
(2 在定时任务末了加>/dev/null 2>&1将输出内容定义到空。这样就不会产生垃圾文件了。
转载地址:https://blog.51cto.com/10642812/2280981
博客作者海风掠过的原创作品