美工统筹SEO,为企业电子商务营销助力!
Linux按时使命Crontab号令利用详解与总结
一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-22 10:28:31 阅读数: 107
crontab号令是Unix和Linux用于设置周期性被履行的指令,是互联网很经常利用的手艺,良多使命城市设置在crontab轮回履行
若是不利用crontab,那末使命便是常驻法式,这对你的法式请求比拟高,一个请求你的法式是24X7小时不宕机,一个是请求你的调剂法式比拟靠得住,现实使命中,90%的法式都不须要花这么多时辰和精神去处理上面的两个题目的,只须要写好本身的营业逻辑,经由进程Crontab这 产业级法式去调剂就好了,Crontab的靠得住性,硬朗性,大师应当是毫无疑难的。
crontab号令简略单纯入门
假定我要设置一个使命,每分钟就要做一个数据同步,这个同步剧本的途径是/home/blue/do/rsyncfile.sh,那末我能够在这么设置装备摆设,利用blue用户,在终端输入
crontab -e# 此时会进入 vi 的编辑画面让您编辑使命!注重到,每项使命都是一行。#分 时 日 月 周 |<==============使命的完整号令行 * * * * * /home/blue/do/rsyncfile.sh
默许环境下,任何利用者只需不被参加 /etc/cron.deny 傍边,那末他就能够间接下达『 crontab -e 』去编辑本身的例行性号令了!全数进程就犹以上面提到的,会进入 vi 的编辑画面, 而后以一个使命一行来编辑,编辑终了以后输入『 :wq 』贮存后分开 vi 就能够了!
假定咱们须要点窜成每5分钟运转数据同步的剧本,那末一样利用 crontab -e 进入编辑:
*/5 * * * * /home/blue/do/rsyncfile.sh
假定办事器出了题目,有一天的数据不同步,因此咱们就须要补数据了,假定这个补数据的剧本是/home/blue/do /rsyncfile_day.sh,可是白天是岑岭期,早晨用户未几,是低峰期,咱们补数据会占用大批带宽,特别是白天,会影响普通营业,以是普通咱们 能够让补数据使命在清晨2点起头跑,那末一样利用crontab -e 进入编辑:
0 2 1 4 * /home/blue/do/rsyncfile_day.sh
如许,在4月1号清晨2点0分就会起头启动咱们的补数据的剧本了。
同步数据,在互联网公司是再泛泛不过的使命了,这里大师能够看到crontab的魅力地点了,只须要写最简略的营业逻辑,把调剂交给crond做,就完成了一个靠得住性很高的一项使命了,若是要本身去额定写这类调剂法式,不晓得要花几多精神能力做到靠得住不变。
crontab号令的语法
crontab [-u username] [-l|-e|-r]选项与参数:-u :只需 root 能力停止这个使命,亦即帮其余利用者建立/移除 crontab 使命排程;-e :编辑 crontab 的使命内容-l :查阅 crontab 的使命内容-r :移除一切的 crontab 的使命内容,若仅要移除一项,请用 -e 去编辑
查问利用者今朝的 crontab 内容:
crontab -l*/5 * * * * /home/blue/do/rsyncfile.sh0 2 1 4 * /home/blue/do/rsyncfile_day.sh
清空利用者今朝的 crontab:
crontab -rcrontab -lno crontab for blue
若是你想删除以后用户的某一个crontab使命,那末利用crontab -e进入编辑器,再删除对应的使命。
crontab号令的限定
/etc/cron.allow
:将能够利用 crontab 的帐号写入此中,若不在这个文件内的利用者则不可利用 crontab;
/etc/cron.deny
:将不能够利用 crontab 的帐号写入此中,若未记实到这个文件傍边的利用者,就能够利用 crontab 。
以优先挨次来讲, /etc/cron.allow 比 /etc/cron.deny 要优先, 而鉴定上面,这两个文件只挑选一个来限定罢了,是以,倡议你只需保留一个便可, 省得影响本身在设置装备摆设上面的鉴定!普通来讲,体系默许是保留 /etc/cron.deny ,你能够将不想让他运转 crontab 的阿谁利用者写入 /etc/cron.deny 傍边,一个帐号一行!
crontab设置装备摆设文件详解
crontab -e
是针对利用者的 cron 来设想的,若是是『体系的例行性使命』时,就要编辑 /etc/crontab 这个文件。
那便是 crontab -e 这个 crontab 实在是 /usr/bin/crontab 这个运转档,可是 /etc/crontab 可是一个『纯笔墨档』,必须用 root 的身份编辑一下这个文件。
起首咱们要来看看crontab的文件内容
cat /etc/crontab # /etc/crontab: system-wide crontab# Unlike any other crontab you don"t have to run the `crontab"# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do. SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command17 * * * * root cd / && run-parts --report /etc/cron.hourly25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
这个文件与将方才咱们下达 crontab -e 的内容几近完整如出一辙!只是有几个处所不太不异
PATH=....:
这里便是输入运转档的搜索途径!利用默许的途径设置装备摆设就已很充足了!
17 * * * * root cd / && run-parts --report /etc/cron.hourly:
这个 /etc/crontab
外面预设置装备摆设义出四项使命使命,别离是每小时、天天、每周及每一个月别离停止一次的使命! 可是在五个栏位前面接的并不是号令,而是一个新的栏位,那便是『运转前面那串号令的身份』为甚么!这与利用者的 crontab -e
不不异。由於利用者本身的 crontab 并不须要指定身份,但 /etc/crontab
外面固然要指定身份啦!以上表的内容来讲,体系默许的例行性使命是以 root 的身份来停止的。
那末前面那串号令是甚么呢?你能够利用which run-parts
搜索看看,实在那是一个 bash script 啦!若是你间接进入 /usr/bin/run-parts
去看看, 会发明这支号令会将前面接的『目次』内的一切文件捉出来运转!这也便是说『 若是你想让体系每小时主动帮你运转某个号令,将该号令写成 script,并将该文件安排到 /etc/cron.hourly/
目次下便可』的意义!
此刻你晓得体系是若何停止他默许的一堆例行性使命排程了吗?若是你下达 ll /etc/cron.daily
就能够看到一堆文件, 那些文件便是体系供给的 script ,而这堆 scripts 将会在天天的清晨 6:25 起头运转!
假定你此刻要作一个目次,让体系能够每 2 分钟去运转这个目次下的一切能够运转的文件,你能够写下以下的这一行在 /etc/crontab 中:
*/2 * * * * root run-parts /etc/cron.min
固然罗, /etc/cron.min 这个目次是须要存在的喔!那若是我须要运转的是一个『法式』罢了, 不须要用到一个目次呢?该若何是好?比方在侦测收集流量时,咱们但愿每五分钟侦测阐发一次, 能够如许写:
*/5 * * * * root /bin/mrtg /etc/mrtg/mrtg.cfg
若何!建立例行性号令很简略吧!若是你是体系办理员并且你的使命又是体系保护方面的例行使命时, 间接点窜 /etc/crontab 这个文件便可喔!又便利,又便利办理呢!
crontab号令的道理
当利用者利用 crontab 这个号令来建立使命排程以后,该项使命就会被记载到 /var/spool/cron/
外面去了,并且是以帐号来作为辨别的喔!举例来讲, blue 利用 crontab 后, 他的使命会被记载到 /var/spool/cron/blue
外头去!但请注重,不要利用 vi 间接编辑该文件, 由于能够由于输入语法毛病,会致使没法运转 cron 喔!别的, cron 运转的每项使命城市被记载到 /var/log/cron
这个登录档中,以是罗,若是你的 Linux 不晓得有否被植入木马时,也能够搜索一下 /var/log/cron
这个登录档呢!
crond办事的最低侦测限定是『分钟』,以是『 cron 会每分钟去读取一次 /etc/crontab
与 /var/spool/cron
外面的数据内容 』,是以,只需你编辑完 /etc/crontab
这个文件,并且将他贮存以后,那末 cron 的设置装备摆设就主动的会来运转了!
备注:在 Linux 底下的 crontab 会主动的帮咱们每分钟从头读取一次 /etc/crontab
的例行使命事变,可是某些缘由或是其余的 Unix 体系中,由于 crontab 是读到内存傍边的,以是在你点窜完 /etc/crontab 以后,能够并不会顿时运转, 这个时辰请从头启动 crond 这个办事吧!/etc/init.d/crond restart
或 service crond restart
crontab号令格局详解
每项使命 (每行) 的格局都是具备六个栏位,这六个栏位的意义为:
代表意义 | 分钟 | 小时 | 日期(天) | 月份 | 周 | 号令 |
数字规模 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 呀就号令啊 |
比拟风趣的是阿谁『周』喔!周的数字为 0 或 7 时,都代表『礼拜天』的意义!别的, 另有一些赞助的字符,大要有底下这些:
特别字符 | 代表意义 |
*(星号) | 代表任甚么时辰刻都接管的意义!举例来讲,典范一内阿谁日、月、周都是 * , 就代表著『不管何月、何日的礼拜几的 12:00 都运转后续号令』的意义! |
,(逗号) | 代表分开时段的意义。举例来讲,若是要下达的使命是 3:00 与 6:00 时,就会是: 0 3,6 * * * command 时辰参数仍是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都合用! |
-(减号) | 代表一段时辰规模内,举例来讲, 8 点到 12 点之间的每小时的 20 分都停止一项使命: 20 8-12 * * * command 细心看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都合用的意义! |
/n(斜线) | 阿谁 n 代表数字,亦便是『每隔 n 单位距离』的意义,比方每五分钟停止一次,则: */5 * * * * command 很简略吧!用 * 与 /5 来搭配,也能够写成 0-59/5 ,不异意义! |
周与日月不可同时并存
另外一个须要注重的处地点於:『你能够别离以周或这天月为单位作为轮回,但你不可利用「几月几号且为礼拜几」的情势使命』。 这个意义是说,你不能够如许编写一个使命排程:
30 12 11 9 5 root echo "just test" <==这是毛病的写法
原来你觉得玄月十一号且为礼拜五才会停止这项使命,无法的是,体系能够会鉴定每一个礼拜五作一次,或每一年的 9 月 11 号别离停止,如斯一来与你现在的计划就不一样了~以是罗,得要注重这个处所!上述的写法是毛病的!
CentOS下检查crontab履行汗青记实
在crontab中增加了按时使命,但发明不获得希冀的成果,因此思疑是crontab不履行呼应的使命,但若何定位crontab是不是履行呢?
这就须要检查crontab的履行汗青记实,详细地位以下:
cd /var/logtail -100 cron
在cron文件中便可查阅已操纵过的相干按时使命。
Crontab号令格局申明
咱们能够用 crontab -e 增加要履行的号令。 号令履行的成果,不管是规范输入仍是毛病输入,都将以邮件情势发给用户。
增加的号令必须以以下格局:
* * * * * /command path
前五个字段能够取整数值,指定甚么时辰起头使命,第六个域是字符串,即号令字段,此中包含了crontab调剂履行的号令。 各个字段之间用spaces和tabs朋分。
前5个字段别离表现:
分钟:0-59小时:1-23日期:1-31月份:1-12礼拜:0-6(0表现周日)
还能够用一些特别标记:
*: 表现任甚么时辰刻,: 表现朋分-:表现一个段,如第二端里: 1-5,就表现1到5点/n : 表现每一个n的单位履行一次,如第二段里,*/1, 就表现每隔1个小时履行一次号令。也能够写成1-23/1.
一些示例:
00 8,12,16 * * * /data/app/scripts/monitor/df.sh30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh
43 21 * * * 21:43 履行15 05 * * * 05:15 履行0 17 * * * 17:00 履行0 17 * * 1 每周一的 17:00 履行0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 履行0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 履行0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 履行42 4 1 * * 毎月1日的 4:42分 履行0 21 * * 1-6 周一到周六 21:00 履行0,10,20,30,40,50 * * * * 每隔10分 履行*/10 * * * * 每隔10分 履行* 1 * * * 从1:0到1:59 每隔1分钟 履行0 1 * * * 1:00 履行0 */1 * * * 毎时0分 每隔1小时 履行0 * * * * 毎时0分 每隔1小时 履行2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 履行30 5 1,15 * * 1日 和 15日的 5:30 履行
Crontab号令背景履行&
当在前台运转某个功课时,终端被该功课占有;而在背景运转功课时,它不会占有终端。能够利用&号令把功课放到背景履行。
如:
30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &
在背景运转功课时要把稳:须要用户交互的号令不要放在背景履行,由于如许你的机械就会在那边傻等。
不过,功课在背景运转一样会将成果输入到屏幕上,搅扰你的使命。若是放在背景运转的功课会发生大批的输入,最好利用上面的体例把它的输入重定向到某个文件中:
如:
command >out.file 2>&1 &
在这个例子中,2>&1表现一切的规范输入和毛病输入都将被重定向到一个叫做out.file 的文件中。
Crontab号令 2>&1 寄义
先看一个例子:
0 2 * * * /u01/test.sh >/dev/null 2>&1 &
这句话的意义便是在背景履行这条号令,并将毛病输入2重定向到规范输入1,而后将规范输入1全数放到/dev/null 文件,也便是清空。
在这里有有几个数字的意义:
0表现 键盘输入1表现 规范输入2表现 毛病输入
咱们也能够如许写:
0 2 * * * /u01/test.sh 1>/u01/out.file &0 2 * * * /u01/test.sh 2>/u01/out.file &0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 &
将tesh.sh 号令输入重定向到out.file, 即输入内容不打印到屏幕上,而是输入到out.file文件中。
2>&1 是将毛病输入重定向到规范输入。 而后将规范输入重定向到文件out.file。
&1 表现的是文件描写1,表现规范输入,若是这里少了&就成了数字1,就表现重定向到文件1。
& :背景履行
测试:
ls 2>1 : 不会报不2文件的毛病,但会输入一个空的文件1;ls xxx 2>1: 不xxx这个文件的毛病输入到了1中;ls xxx 2>&1: 不会天生1这个文件了,不过毛病跑到规范输入了;ls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1: 由于重定向标记>默许是1,这句就把毛病输入和规范输入都传到out.txt 文件中。
Crontab号令 2>&1写在前面的缘由
格局:command > file 2>&1 == command 1> file 2>&1
起首是command > file将规范输入重定向到file中, 2>&1 是规范毛病拷贝了规范输入,也便是一样被重定向到file中,终究成果便是规范输入和毛病都被重定向到file中。
若是改成: command 2>&1 >file
2>&1 规范毛病拷贝了规范输入的行动,但此时规范输入仍是在终端。>file 后输入才被重定向到file,但规范毛病依然坚持在终端。
经历经历:
筹算在办事器上 天天早晨23:00 按时履行Python剧本,去备份MySql数据库,号令以下:
* 23 * * * python /var/www/html/crontab_python/back_db.py >/dev/null 2>&1
成果呢,每次备份都发生了 60份 备份文件,细心检查按时使命号令,发明在“分”的地位上,少加了个“0”,由于“*”表现该地位的任何一个值,点窜以下:
0 23 * * * python /var/www/html/crontab_python/back_db.py >/dev/null 2>&1
而后是PHP剧本的按时履行
0 4 * * * /usr/local/php/bin/php /usr/local/nginx/www/backup-db/backup_db.php 172.16.8.26 >/dev/null 2>&10 4 * * * /usr/local/php/bin/php /usr/local/nginx/www/backup-db/backup_db.php 172.16.10.151 >/dev/null 2>&1
本文为大师详细先容了Linux按时使命Crontab号令利用详解并总结Crontab号令的一些利用技能和使命中碰到的一些题目处理体例,但愿对大师有所赞助
上一篇: windows体系下装置JDK8的教程图解 | 下一篇:Ubuntu下若何建立XFS文件体系的LVM详解