day 17 第13章系统定时任务Cron(d)服务应用实践

上节回顾


suid是什么?


day 17 第13章系统定时任务Cron(d)服务应用实践_第1张图片

上章剩余内容

sgid

作用之一:

sgid的作用是


locate搜索内容,

updatedb 更新locate查找对应内容的数据库


sgid特点:

让不同用户创建文件,都属于相同的用户组,从而可以互相共享文件的权限。

例如:


day 17 第13章系统定时任务Cron(d)服务应用实践_第2张图片


sticky(粘滞位)

设置一个目录,所有的用户,所有的用户都可进行增删改,但是都不能删除/tmp目录



day 17 第13章系统定时任务Cron(d)服务应用实践_第3张图片

第13章系统定时任务Cron(d)服务应用实践

Linux系统定时任务:

3W1H框架联想:

1、什么是定时任务?

周期性的执行任务计划的软件,Linux定时任务的常用软件crond。

2、有什么用?(作用:)

使用定时任务软件,可以每天、每小时,按需求重复执行一项工作。

例如:(1)保证企业数据安全,不丢失不泄漏。备份。

需要写一个程序实现自动备份,然后让定时任务软件自动执行。


3、怎样用

首先有两个分类:

(1)系统定时任务计划

(不用管理员干预,系统自动执行

也可以利用利用系统任务为管理员服务)

[root@xietangsheng /etc]# ll /etc/cron.daily/logrotate

-rwx------. 1 root root 219 Oct 31 03:12 /etc/cron.daily/logrotate

按天切割日志,就可以用logrotate。

(2)用户定时任务计划(平时用得最多)

cron是定时任务的软件名

crond是服务的进程名,真正实现定时任务的服务。

crontab是命令,使用俩设置定时任务规则的配置命令。

注意:

要想使用crond服务,就要先启动这个服务,C7默认就是开机启动状态。

systemctl start crond(启动)

systemctl stop crond (停止)

systemctl restart crond (重新启动)

systemctl disable crond (永久停止,开机不会自动启动)

systemctl enable crond (永久启动,开机自动启动)


day 17 第13章系统定时任务Cron(d)服务应用实践_第4张图片

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

定时任务的内容存放在/var/spool/cron,以当前用户名为文件名

-l 列表 查看已经设置好的任务*****

-e 编辑定时任务*****

-u 查看特定用户下的定时任务***

总结以上:

crontab -l = cat /var/spool/cron (root用户)

crontab -e = vim /var/spool/cron (root用户)


day 17 第13章系统定时任务Cron(d)服务应用实践_第5张图片

编写定时任务的语法:(针对用户的)

共6列:


day 17 第13章系统定时任务Cron(d)服务应用实践_第6张图片

第一列:分钟 Minute (0-59)

第二列:时 Hour (0-23)

第三列:日 day of month (1-31)

第四列:月 month (1-12)

第五列:周 (0-6)

第六列:要执行的任务命令或程序

定时任务中的特殊符号:

* 表示 每 的意思(每分、每时、每日、每周、每月)

如:

00 23 * * * cmd (每天23点执行cmd任务)

-  连续区间 如 1-10(1到10)

00 8-23 * * * cmd(每天的8点到23点执行cmd)

, 列举 1,2,3,4,8

00 1,2,3,4,8 * * * cmd (每天的1点2点3点4点8点执行cmd)

/n n是数字,即“每隔n单位时间”

*/10 * * * * cmd(每隔10分钟执行一次任务)

实践:

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)拷贝命令到定时任务编辑里。

范例13-2:让服务器时间每5分钟和互联网时间做一次同步。

安装时间同步服务器:

[root@xietangsheng /tmp]# yum provides ntpdate

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.aliyun.com

* extras: mirrors.aliyun.com

* updates: mirrors.aliyun.com

ntpdate-4.2.6p5-28.el7.centos.x86_64 : Utility to set the date and time via NTP

Repo        : base

[root@xietangsheng /tmp]# yum -y install ntpdate-4.2.6p5-28.el7.centos.x86_64

[root@xietangsheng /tmp]# crontab -e

1 line less; before #11 5 seconds ago

*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

*/5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com &>/dev/null

/dev/null 黑洞文件,丢进去的都会消失


范例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

2、编写定时任务

[root@oldboyedu ~]# crontab -l

00 00 * * * tar zcvf /data/html_$(date +%F).tar.gz /var/www/html/

错了,不执行。。。。

看报错日志。。。错误日志

定时任务没有执行,出错了日志在哪里?

出错日志/var/log/cron

Mar 22 12:03:01 oldboyedu CROND[18770]: (root) CMD (tar zcvf /data/html_$(date +)

定时任务对%的要求,百分号要转义。\%

正确答案:

[root@oldboyedu ~]# crontab -l

00 00 * * * tar zcvf /data/html_$(date +\%F).tar.gz /var/www/html/

优秀的答案(企业里):

1.命令行执行

cd /var/www

tar zcf /data/html_$(date +%F).tar.gz ./html

2.尽量用脚本文件实现

#mkdir /server/scripts -p #存放脚本的文件

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@oldboyedu /server/scripts]# ls -l /data

企业运维面试题

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、 为定时任务规则添加必要注释。(做的什么,什么人做的,什么时间)

2、所有定时任务尽量都以脚本的形式执行

3、 在执行的Shell脚本前加上/bin/sh

4、定时任务中命令或脚本的结尾加 &>/dev/null(如果不加,会产生大量垃圾,沾满系统的inode)

5、在指定用户下执行相关定时任务。

6、生产计划程序中不要随意打印输出信息。(如:zcvf中的v,就是默认输出,应该去掉。)

7、定时任务执行的脚本要存放在规范的路径下。

8、配置定时任务要规范操作过程,减少出错。如下图所示:

day 17 第13章系统定时任务Cron(d)服务应用实践_第7张图片

9、定时任务脚本中程序命令及路径尽量用全路径。

10、时间变量%要用反斜线转义(只有定时任务里面是命令时需要)

11、若系统中调用了系统环境变量,要重新定义。如:

export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\$'

echo $PS1

12、定时任务出错或无法执行,就检查/var/log/cron日志

下周一考试:考到定时任务

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

接下来:

用户管理:1天

磁盘管理:2-3天

三剑客深入:1-2天

shell脚本基础:2天

进程管理命令、安装命令:1天

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

你可能感兴趣的:(day 17 第13章系统定时任务Cron(d)服务应用实践)