十三章:Linux系统定时任务Cron服务应用实践day17

重点

1.Linux系统定时任务

  1. 什么是定时任务?
    周期性的执行任务计划的软件,Linux定时任务的常用软件crond。
  2. 使用定时任务软件,可以每天,每小时按你需求重复的执行一项工作。
    例如:备份 都是0点以后,2点爬起来备份,4点以后睡觉。
    需要写一个程序实现自动备份,然后让定时任务软件帮你执行。
    闹钟。。。。
  3. 怎样用。
  • (1)系统定时任务计划
    1.不用管理员干预,系统自动执行。
    2.也可以利用系统任务为管理员服务。
    [root@oldboy ~]# ll /var/log/messages*
    -rw-------. 1 root root 96594 Mar 21 12:40 /var/log/messages
    -rw-------. 1 root root 485249 Mar 20 10:46 /var/log/messages-20190320
    [root@oldboy ~]# ll /var/log/secure*
    -rw-------. 1 root root 1430 Mar 21 12:50 /var/log/secure
    -rw-------. 1 root root 2695 Mar 20 10:46 /var/log/secure-20190320
    [root@oldboyedu /etc/cron.daily]# ll /etc/cron.daily/logrotate /etc/logrotate.conf
    -rwx------. 1 root root 219 Oct 31 2018 /etc/cron.daily/logrotate
    -rw-r--r--. 1 root root 662 Jul 31 2013 /etc/logrotate.conf
    按天切割日志,就可以用logrotate。
    image.png
  • (2)用户定时任务计划
    在Linux系统中,
    cron是定时任务的软件名,
    crond是服务进程名,真正实现定时任务服务。
    crontab命令是用来设置定时任务规则的配置命令。
    要想配置定时任务,首先启动crond服务。
    systemctl start crond.service
    systemctl stop crond.service
    systemctl status crond.service
    image.png

开启自启动
systemctl disable crond.service
systemctl enable crond.service

==========================================

2.crontab命令是用来设置定时任务规则的配置命令。

内容存放哪里了。定时任务内容存放的位置/var/spool/cron/
以当前用户名作为文件名


image.png
  • 参数
    -l l列表 查看已经设置的定时任务*
    -e edit 编辑定时任务*
    -u user 查看特定用户下定时任务
    root:
    crontab -l == cat /var/spool/cron/root
    crontab -e == vim /var/spool/cron/root
  • 语法
    编写定时任务的语法:
    共六列:
    第一列:分 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
    第六列:要执行的任务命令或程序
  • 特殊符号:

*表示的 每或每一 的意思
00 23 * * * cmd
-连续区间 1-10
00 8-23 * * * cmd
, 代表列举 1,2,3,4,8
00 1,2,3,4,8 * * * cmd
/n n是数字。
n代表自然数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成
*/10 * * * * cmd

  • 举例

命令实例1:/1 * * * * /bin/sh /scripts/data.sh
在本例中除了数字与命令脚本外,还使用到了符号"
",号的意思“每一”。
第一列的意思为分钟,特殊符号“/”表示每隔的意思,即表示每隔一分钟执行/bin/sh /scripts/data.sh程序。
命令实例2:30 3,12 * * * /bin/sh /scripts/oldboy.sh
在本例中,第一列为30,表示30分钟;第二列为 3,12,这代表3点及 12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或描述为每天凌晨3:30和中午12:30)执行/scripts/oldboy.sh脚本。
命令实例3:30 /6 * * * /bin/sh /scripts/oldboy.sh
在本例中,第一列为30,表示30分钟;第二列
/6代表每6个小时,也相当于 6、12、18、24 的作用。此定时任务的意思是每隔6个小时的半点时刻执行/scripts/oldboy.sh脚本任务。
命令实例4:30 8-18/2 * * * /bin/sh /scripts/oldboy.sh
在本例中,其中的第一列为30,表示30分钟;第二列8-18/2代表在早晨8点到下午18点之间每隔2小时,也相当于把8、10、12、14、16、18单独列出。
那么,此定时任务的意思就是早晨8点到下午18点之间,每隔2小时的半点时刻执行/scripts/oldboy.sh脚本任务。
命令实例5:30 21 * * * /application/apache/bin/apachectl graceful
本例表示每晚的21:30重启apache。
命令实例6:45 4 1,10,22 * * /application/apache/bin/apachectl graceful
本例表示每月1、10、22日的凌晨4 : 45分重启apache。
命令实例7:10 1 * * 6,0 /application/apache/bin/apachectl graceful
本例表示每周六、周日的凌晨1 : 10分重启apache。
命令实例8:0,30 18-23 * * * /application/apache/bin/apachectl graceful
本例表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
命令实例9:00 /1 * * * /application/apache/bin/apachectl graceful
本例表示每隔一小时整点重启apache
命令实例10:
23,00-07/1 * * * /application/apache/bin/apachectl graceful
本例并不表示晚上23点和早上0-7点之间每隔一小时重启Apache。
要说明的是,以上结果是不规范的,也是不对的。大家想想为什么?
以上定时任务的第一列为
,表示每分都执行任务即晚上23点和早上0-7点之间每隔一小时的每分都重启Apache,很可怕吧。
命令实例11:00 11 * 4 1-3 /application/apache/bin/apachectl graceful
本例表示4月的每周一到周三的上午11点整重启Apache。
命令实例12:30 09 * * 0 去老男孩教育上课
本例表示每周日上午9:30去老男孩教育上课,这是周末班的上课频率。
命令实例13:30 08 * * *去老男孩教育上课
本例表示每上午8:30去老男孩教育上课,这是脱产班的上课频率。
通过上述13个例子,相信读者已经能够理解定时任务的配置规则了。

  • 实践:
    1、题目:每分钟追加一次oldboy字符串到/tmp/oldboy.log里。

解答:大象放冰箱分三步
a.命令行执行成功。
[root@oldboyedu ~]# echo "oldboy">>/tmp/oldboy.log
[root@oldboyedu ~]# cat /tmp/oldboy.log
oldboy
[root@oldboyedu ~]# echo "oldboy">>/tmp/oldboy.log
[root@oldboyedu ~]# cat /tmp/oldboy.log
oldboy
oldboy
b.配置定时任务crontab -e 编辑配置
[root@oldboyedu ~]# crontab -l
* * * * * echo "oldboy">>/tmp/oldboy.log
c.检查
[root@oldboyedu ~]# tail -f /tmp/oldboy.log
oldboy
oldboy
oldboy

老男孩思想:
1)先输入* * * * *
2)先命令行操作成功。
3)拷贝命令到定时任务编辑里。

3.系统自动更新时间命令

范例13-2:让服务器时间每5分钟和互联网时间做一次同步。
安装时间服务软件:yum install ntpdate -y
更新互联网时间 /usr/sbin/ntpdate ntp1.aliyun.com

4. 优秀案例

范例13-3:每天晚上0点,把站点目录/var/www/html下的内容打包备份到/data目录下,并且要求每次生成不同的备份包名。
套入框架分三步:

  • 1.命令行稿成功
    准备工作:
    [root@oldboyedu ~]# mkdir /var/www/html /data -p
    具体命令:
    [root@oldboyedu ~]# tar zcvf /data/html_(date +\%F).tar.gz /var/www/html/ tar: Removing leading `/' from member names /var/www/html/ [root@oldboyedu ~]# ll /data total 4 -rw-r--r-- 1 root root 117 Mar 22 11:59 html_2019-03-22.tar.gz 正确答案 [root@oldboyedu ~]# crontab -l 00 00 * * * tar zcf /data/html_(date +%F).tar.gz /var/www/html/
    优秀答案:(企业里)
    1、命令执行
    正确答案
    [root@oldboyedu ~]# crontab -l
    00 00 * * * tar zcvf /data/html_$(date +%F).tar.gz /var/www/html/
    2.尽量用脚本文件实现
    image.png

cd /server/scripts

cat bak.sh

cd /var/www
tar zcf /data/html_$(date +%F).tar.gz ./html
命令行执行:
/bin/sh /server/scripts/bak.sh
3、编辑定时任务

bak html dir by oldboy at 2020108

00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null
[root@oldboyedu /server/scripts]# crontab -l|tail -2

bak html dir by oldboy at 2020108

00 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null
4、检查正式结果
[root@woaini /data]# crontab -l

  • /dev/null 黑洞设备
    马航370>/dev/null
    &>/dev/null 等价>/dev/null 2>&1
    image.png

5.生产环境下的定时Cron书写要领

13.5.1 要领1:为定时任务规则加必要的注释
13.5.2 要领2:所有的定时任务尽量都以脚本的形式执行
13.5.3 要领3:在执行的Shell脚本前加上/bin/sh
13.5.4 要领4:定时任务中命令或脚本的结尾加>/dev/null 2>&1
13.5.5 要领5:在指定用户下执行相关定时任务
13.5.6 要领6:生产任务计划程序中不要随意打印输出信息,有输出的想法去掉。
13.5.7 要领7:定时任务执行的脚本要存放到规范路径下
13.5.8 要领8:配置定时任务要规范操作过程,减少出错
13.5.9 要领9:定时任务脚本中程序命令及路径尽量用全路径
13.5.10 要领10:时间变量%号要用反斜线转义(只有定时任务里是命令时需要)
13.5.11 要领11:若脚本中调用了系统环境变量,要重新定义
13.5.11 要领12:出错或无法执行,就检查/var/log/cron日志
运维规范:
脚本位置:/server/scripts
软件位置:/server/tools
编译位置:/application/软件名字-版本,然后要软链接。

1) 在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句。
2) crontab在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh,怎么实现 ?
3) crontab文件由六个域组成,每个域之间用空格分割,其排列正确的为( )
A、MIN HOUR DAY MONTH YEAR COMMAND
B、MIN HOUR DAY MONTH DAYOFWEEK COMMAND
C、COMMAND HOUR DAY MONTH DAYOFWEEK
D、COMMAND YEAR MONTH DAY HOUR MIN

如何调试定时任务?

1、查看错误日志*****
/var/log/cron
学会最小化排除:
先清空,>/var/log/cron
然后在测试和观察。

2、增加执行任务频率调试任务 *****
把频率调快。

3、把定时任务执行时间比当前时间拖后5分钟
00 03执行,当前5:00,咱们就把时间调整 05 05,有个5分钟提前量。

4、调整系统时间(测试环境还凑合)
00 03执行,把系统时间调整到2:55。

5、通过脚本日志输出调试定时任务
定时任务输出

          • /bin/sh /server/scripts/bak.sh &>/tmp/bak.log
            脚本输出:
            tar zcvf oldboy.tar.gz ./data &>/tmp/tar.log

注意点:
有时候程序只能执行一次。一定要在测试环境测试好,然后直接复制到正式。

代码发布流程:
办公室测试环境===>IDC机房测试环境===>IDC机房正式环境

防止在正式环境发生错误,从而影响用户体验,业务稳定。

企业故障案例:No space left on device常见企业故障案例
磁盘满的报错,原因往往是inode被占满了。
df -i
因为定时任务没有加&>/dev/null,定时任务执行的时候把输出给系统root发邮件。
邮件服务器postfix服务默认不开,这些给系统发的邮件就会堆在临时目录(大量小文件存在)
/var/spool/clientmqueue/ 6
/var/spool/postfix/maildrop/ 7

企业故障案例:程序通过手动可以执行,放定时任务里不执行。
export变量生产案例

定时任务在执行脚本的时候,多数情况没办法加载环境变量,特别是/etc/profile。
登录后怎么操作都对,但是就是放到定时任务不行。

命令行:bash登录方式
1.手工登录后,加载所有环境变量(/.bash_profile,/.bash_rc,/etc/profile,/etc/bashrc)
2.定时任务执行脚本属于非登录状态(/etc/bashrc)。
实践检验,定时任务能否自动加载/etc/bashrc和/etc/profile文件。

所有运维都会把变量放到此文件/etc/profile,把这个文件里的变量定义
在执行的脚本中 重新定义。

具体为crond执行Shell时只能识别为数不多的系统环境变量,普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声明下该变量,以确保脚本正确执行。以后要将其作为一个开发基本规范写上。

1)在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句。

oldboy...

15 03 * * 6 /bin/perl /home/shell/collect.pl >/dev/null 2>&1

2)crontab在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh,
怎么实现 ?
00 6-12/2 * 11 * /bin/sh /usr/bin/httpd.sh &>/dev/null

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容