小白成长之路-linux定时任务cron和crontab

Linux定时任务

一、为啥要学习定时任务

在我们现实生活中处处可以用到定时任务。
如:
亲爱的,2020年4月1号会上映一部动画片电影我们去看看啊。
明天上午老师要看论文了
我作业还没写,明天早上上课要收的
明天下午15点开工资

看看我们生活中的定时任务是不是很多。计算机是人来设计的,所以它的功能都是模仿我们人类的生活方式的。面向对象编程也是
在计算机中我们也是有很多需要预定时间来做的工作,比如:每天晚上6点给所有同学发送明日课程表。夜晚定时备份服务器的配置文件、定时备份服务器上的错误日志、定时同步服务器的时间、web服务器定时生成html页面进行缓存等等太多了
综上所述,我们需要学习定时任务

二、学习目标
  • linux中的定时任务分那几种类
  • 执行过程是怎样的
  • 区分定时任务需要使用那中类型的定时任务
  • linux中的定时任务涉及的文件有哪些
  • 我们怎么使用它们实际操作
三、定时任务的执行过程理解图

在这里插入图片描述
执行过程说明:
在我们工厂里有一支保安的队伍名字叫crond,他们的工作就是时刻监督美女A、美女B和美女C的工作计划并帮助执行计划。美女A、B、C的工作计划时间一到,他们就会马上按找美女们规定的时间做要做的事。
美女们现在使用crontab -e工具来来编辑工作计划任务。她们要使用crontab工具。crond检查/etc/cron.allow文件中是否明确的记录了她们那个人可以使用,如果记录了那么就可以给她使用该软件做编辑。如下图:
在这里插入图片描述
如果在allow文件中没有明确的记录她们可以使用,那么就需要检查她们是不是在deny文件中明确的记录了,她们不能使用。如下图
在这里插入图片描述
可以看到deny中没有记录menv A、meinv B和meinv C,而记录的是liangqingshan ,则说明只用liangqingshan这个账户是不能使用crontab 命令来编辑创建定时任务的,使用后会出现下面的提示。
在这里插入图片描述
在这里插入图片描述
下面我们以美女A的工作为实例
下图是美女A的工作端
在这里插入图片描述
美女A创建定时任务,每一分钟向hello.txt 文件中写入一条"hi,good luckly my motherland"信息。如下图
在这里插入图片描述
然后我们退出并保存文件。这样我们创建了一条定时任务,这条定时任务会放在下面的位置,如图
在这里插入图片描述
下面我们看一下于美女同名的文件meinv_A中的内容,如下图
在这里插入图片描述
如上图所见,同名文件中保存的内容就是该用户创建的定时任务。
总结:
1)用户在创建定时任务使用crontab -e命令来编辑的。当然这不是必须的,还有下面的方法来创建定时任务。

  • 在/etc/crontab中直接编辑。如下图(我们不推荐使用这种方式,因为这是设置全局的)
    在这里插入图片描述
    2)用户能否使用crontab命令是受到/etc/cron.allow(白名单)文件和/etc/cron.deny(黑名单)文件来控制的。
文件名称说明
/etc/cron.allow检查白名单,加入到该名单的用户可以直接使用crontab工具,不需要在做deny的检查了,也就是说,/etc/cron.allow的文件等级高于/etc/cron.deny的文件等级
/etc/cron.deny检查黑名单,在/etc/cron.allow中没有查询到的用户会做本文件的检查,只要用户名称记录在案的都不允许使用crontab工具来创建定时任务
特别说明如果用户开始的时候是允许使用crontab工具来创建定时任务的,然后过了一段时间后,想禁止该用户使用crontab工具,即在/etc/cron.allow中不添加该用户的用户名,在/etc/cron.deny中记录该用户的用户名。则记录完成后的时间之后该用户就无法使用crontab工具来创建和查看她的定时任务了,但是该用户之前创建的定时任务依旧可以运行。如果想禁止运行清空或注释掉该任务就可以了,推荐注释掉任务

系统是怎么样运行的呢?
1)系统开机后crond服务启动后,crond服务会首先查找/etc/init.d或者/etc/rc.d/init.d/corn文件来设置环境,如下图
在这里插入图片描述
2)加载完环境后会查找3个位置,统计出全部的当前已经创建的定时任务。分别是:

目录或文件名称说明
/var/spool/cron/目录用户使用crontab创建的定时任务保存在该文件夹下且任务文件的名称就是该用在系统中的用户名。
/etc/anacrontab文件系统定时任务保存位置,我们不要在该文件中创建定时任务
/etc/cron.d/目录用户创建的shell脚本存放位置,这样方便管理,这里的脚本是用来定义全局任务的

3)统计完成全部定时任务后,检查每一个定时任务,判断每一个定时任务是否是在当前的分钟执行,是则执行,不是则等待

四、linux中的定时任务是什么
4.1 linux中定时任务分类

分类分为:
系统定时任务和用户自定义定时任务两种
从字面就可以知道这两种定时任务的区别和用法,这里就不详细写明了

4.1.1 系统定时任务

系统定时任务简单的说,就是系统每天需要在指定的时间要做的任务,比如把缓存中的数据写入硬盘,清理日志,打包文件等等
设置文件的位置在:/etc/anacrontab
文件权限是:600
在这里插入图片描述
注意:此位置是放系统的定时任务的,我们个人的任务不要放到这里面,这里面的任务会影响全部用户。此处禁止放入,禁止放入,禁止放入,重要的事情说三遍。

4.1.2 用户定时任务

用户定时任务就是用户自己定义的需要执行的任务,如定时的邮件提醒,收集系统状态然后发送邮件给运维人员。等等
crontab命令管理文件位置:白名单【/etc/cron.allow】黑名单【/etc/cron.deny】
操作定时任务的命令说明

  • 打开定时任务编辑器,使用如下命令
crontab -e #用来打开定时任务的编辑器,用来创建我们需要的定时任务。
#注意:这里涉及到的命令全部使用全路径,如:echo命令,在这里我们要用/bin/echo 
  • 查看我都创建了哪些定时任务,使用的命令如下
crontab -l #相当于使用cat /var/spool/cron/当前用户名的文件
  • 制定用户创建定时任务
crontab -u meinv_A #制定给美女A创建定时任务,定时任务文件会
# 放在/var/spool/cron/meinv_A中

如下图的说明:
在这里插入图片描述
编辑的内容
在这里插入图片描述
在指定的用户下查询
在这里插入图片描述

  • 删除自己创建的定时任务。注意:创建的定时任务是保存在/var/spool/cron/文件夹下的任务
crontab -r 用户名 #这里的用户名不写,则便是删除当前用户,即谁用的这条命令,就删除谁的定时任务。写入用户名,就删除该用户的定时任务。
  • 操作确认
crontab -i -/e/l/r/u #加-i是用来确认是否要进行这些操作,需要和其他命令组合到一起使用。

如图:
在这里插入图片描述

五、定时任务创建的格式

格式说明保存在/etc/crontab文件中,如下图
在这里插入图片描述
理解图如下
在这里插入图片描述

  • 秘书们的权限说明
秘书名称取值范围权限职责说明
分秘书0-59可以选择的分钟范围是0分到59分钟
时秘书0-23可以选择的小时范围是0点到23点
日秘书1-31可以选择的天数范围是1号到31号
月秘书1-12可以选择的月份范围是1月到12月
周秘书0-6可以选择的每周天数范围是0到6,表示周一到周日
  • 秘书们的笔记记录格式说明
符号说明及实例说明
*表示所有可能的值。整数表示
-表示范围取值。如:1-4 表示:1,2,3,4
,表示列表。如:1,5 表示:1和5
/表示每。如:*/5放到分秘书哪里就表示:每五分钟。放在时秘书哪里表示每5小时等等
  • 创建秘书处
# 安装cron
yum -y install crontabs

对秘书处可以做的操作

操作名称说明
开始启用秘书处service crond start
关闭秘书处service crond stop
重新启用秘书处service crond restart
重新制定秘书处的工作内容service crond reload
看看秘书们做的怎么样service crond status
  • 检查秘书处是不是在上班可以用下面的方法
    查看crond进程是否启动
    第一种方法:
    在这里插入图片描述
    第二种方法:
    在这里插入图片描述
    对应crontab -e的编辑文件的格式就是
    *空格*空格*空格*空格*空格要执行的命令
六、让我们的秘书开始干活把

1)让我们的分秘书每间隔一分钟手书一次好运并记录到goodluck.txt文件

*/1 * * * * /bin/echo "good luck!!"  >> /home/meinv_A/goodluck.txt

在这里插入图片描述
2)让我们的时秘书每隔一小时的整点在goodluck.txt文件中写入“I am superman”

0 */1 * * * /bin/echo "I am superman" >> /home/meinv_A/goodluck.txt

在这里插入图片描述
3)让我们的日秘书,每天9点在goodluck.txt文件中写入“come here”

0 9 */1 * * /bin/echo "come here" >> /home/meinv_A/goodluck.txt

在这里插入图片描述
4)让我们的月秘书每月的第一天,上午9点整在文件goodluck.txt文件中写入“I am good”

0 9 1 */1 * /bin/echo "I am good" >> /home/meinv_A/goodluck.txt

在这里插入图片描述)
5)让我们的月秘书每个月的每个星期的星期一上午9点10点整在文件goodluck.txt中写入“over”

0 9,10 * */1 1 /bin/echo "over" >> /home/meinv_A/goodluck.txt

在这里插入图片描述
6)每天早上的8:45分在job.txt文件中签署“here”

45 8 */1 * * /bin/echo "here" >> /home/meinv_A/job.txt

在这里插入图片描述

七、注意事项

1)定时任务中的命令要使用全路径,以防止环境变量引起的错误
2)定时任务中的文件地址要使用绝对路径
3)在定时任务中要执行的操作最好写成脚本
4)如果在定时任务中用到了%,则需要使用转义字符“\”进行转义(多用于日期格式设置)
5)crontab -r 命令能不用就不要用,可以把该命令进行注释,先停用几天看看是否对系统有影响,没有影响后在进行备份转移走该文件,做好备份工作,不要删除,切记!切记!切记!
6)在定时任务中使用变量时最好用 ( 变 量 名 称 ) 如 : (变量名称) 如: ()(data)-个人推荐
7)不要在定时任务中有输出,如果调试的过成中需要输出,那么就写在日志中
8)写定时任务完成后,要现在本地密集的测试一下,如每5分钟,每3分钟执行一次,看结果正确之后在放到生产环境中
9)在定时任务的前面一定要加上注释,否则后期自己就不知道是干什么的了。如果离职的话也方便交接
10)在定时任务后面加上重定向> /dev/null 2>&1。原因是:每条定时任务执行完毕后,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,如果定时任务的时间间隔非常短,那么你的inode很快就没有了。
11)如果crontab命令突然失效了,我们可以重启/etc/init.d/crond服务。或者查看日志看看是不是那个定时任务写错了,日志通常在/var/log/cron,因为是刚发生的,所以用tail -n 10 /var/log/cron 现实日志都后10行应该够了。

/etc/init.d/crond restart
八、定时任务误删除了怎么办

1)祈祷引起的生产事故不大
2)祈祷你删除的用户的定时任务在该用户的加目录还有备份
如果有备份使用下面的方式做处理
查询是否有备份
在这里插入图片描述
下面使用crontab -r命令删除/var/spool/cron/目录下的meinv_A定时任务
在这里插入图片描述
下面开始还原任务
1:权限满足的情况下,直接拷贝过去
在这里插入图片描述
2:权限不满足的情况下,的做法
不满足权限的样子如下图
在这里插入图片描述
然后找有权限的同事考过去。这个主要是看你的授权权限了,其他的办法我这没有了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值