Linux定时任务
一、为啥要学习定时任务
在我们现实生活中处处可以用到定时任务。
如:
亲爱的,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(黑名单)文件来控制的。
系统是怎么样运行的呢?
1)系统开机后crond服务启动后,crond服务会首先查找/etc/init.d或者/etc/rc.d/init.d/corn文件来设置环境,如下图
2)加载完环境后会查找3个位置,统计出全部的当前已经创建的定时任务。分别是:
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文件中,如下图
理解图如下
秘书们的权限说明秘书们的笔记记录格式说明创建秘书处
# 安装cronyum -y install crontabs
对秘书处可以做的操作
检查秘书处是不是在上班可以用下面的方法
查看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:权限不满足的情况下,的做法
不满足权限的样子如下图
然后找有权限的同事考过去。这个主要是看你的授权权限了,其他的办法我这没有了。