Linux定时任务详解
幻想一下💬 ,如果我们今天有这样一个需求:我想让linux程序到一个时间点自动运行执行我想要的命令,嗯~,比如说,我想隔一段时间运行一个程序检测一下未来女朋友👧 相册有没有更新照片🖼️ ,如果有就立马提醒并发给我😺😙…
一、定时任务介绍
在Linux系统中,计划任务(Cron)是一种强大的工具,可以自动执行预定的任务。它非常适合定期运行脚本、备份数据、清理临时文件等一系列重复性任务。如果想稍后执行特定任务一次,可以使用其他命令。但是,对于重复性任务,cron在Linux系统中绝对是完美的解决方案。Cron是一个守护进程,这意味着它在后台运行以执行非交互式任务。类似Windows后台进程中的服务。
1、定时任务分类
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。定时任务分为系统定时任务和用户定时任务,这两者的工作互不影响。
① 系统执行的工作(系统定时任务):系统周期性所要执行的工作,如备份系统数据、清理缓存;
② 个人执行的工作(用户定时任务):某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信息,这些工作可由每个用户自行设置;
2、相关配置文件
① 系统定时任务编辑的配置文件是:/etc/crontab
,我们通常使用vim /etc/crontab
命令添加定时任务,可以使用cat命令查看一下;
② 用户定时任务的配置文件是 /var/spool/cron/{user}
,我们可以使用快捷键 crontab -e
编辑用户定时任务,也可以使用vim直接编辑用户定时任务的配置文件,他们的区别是,使用 crontab -e
有语法纠错的功能,而直接编辑就没有这种功能。
首次使用用户定时任务时是没有用户定时文件的,需要crontab -e
保存退出一下,就有了我们的用户定时文件。
文件路径 | 文件功能 |
---|---|
/etc/cron.hourly | 系统定时任务每个小时运行这个目录里的内容 |
/etc/cron.daily | 系统定时任务每天运行这个目录里的内容 |
/etc/cron.weekly | 系统定时任务每周运行这个目录里的内容 |
/etc/cron.monthly | 系统定时任务每月运行这个目录里的内容 |
3、基本使用方法
经过上面我们对系统定时任务配置文件的查看,其实我们已经能够知道定时任务的基本使用了。
1 | 分 小时 日 月 星期 用户 命令 |
⚠️注意:定时任务是从整点开始执行的。如果我们在08:02定义每隔5分钟执行一次,那么整点即为08:00、08:05、08:10、08:15…那我们第一次执行定时任务时间则为08:05。
二、定时任务设置
我们直接跟随案例来学习——🍳 每分钟创建一个以ip地址命名的目录,并把/etc/目录打包压缩放在里面,保持每天的压缩包名字不同 。
1 | ###环境准备### |
1、分解需求
1 | 第一步:创建一个以ip地址命名的目录:命令 mkdir -p /data/`hostname -I`; |
1 | 第二步:每天的压缩包名字不同————我们可以指定压缩包的名字为当天的日期; |
1 | 第三步:打包/etc/目录并压缩放在上一步的目录里面: |
2、测试命令
3、写入脚本
1 | [root@nanxi ~]#touch NANXI.sh |
4、测试脚本
坑洞警告
可能会有家人们,想用一条指令就完成脚本的书写,但是报错了,没错我一开始就是,并不是转义的问题,问题出在一个很细节的地方,那就是hostname -I
命令,hostname -I
命令输出的IP地址的最后一位是一个空格,在平常使用中无妨,但如果拼接作为命令使用时问题就出来了,我们需要把这个空格删除,方法有很多种,但是这样以来,命令可就太长了,可读性差,我的做法是直接切换进目录,绕过这个命令与后面内容的拼接。大家也可尝试需求其他更多的方法哦~
5、写入定时任务并测试
6、设置定时任务
定时任务测试成功后,按照业务需求,更改定时任务的时间为正确的时间,完成定时任务设置。
注意
做备份定时任务时,如果是本地测试,测试完成后记得把我们的定时任务注释掉,或者再添加一个定期删除备份的定时任务,否则一直在本地虚拟机备份的话,我们的机子迟早要完,哈哈哈哈哈~😆
同样的我们也要注意小文件的产生,如果我们关闭邮件服务器的话,虽然会提高服务器的性能,但是运行定时任务会在本地临时生成大量的小文件(存放定时任务运行日志/var/spool/postfix/maildrop/
),如果不注意,这些小文件可能会把我们inode号消耗一空,导致我们无法写入磁盘。
停止邮件服务的命令:systemctl stop postfix
和 systemctl disable postfix
。
三、定时任务注意事项
1、书写定时任务时加注释
书写定时任务时加注释,这不是一个强制要求,而是一种良好的书写习惯,方便我们自己或者他人阅读,可以增强文件的可读性,如果不添加注释的话,在我们修改定时任务时,可能记不得这个定时任务的作用,以致于我们不得不进入文件查看其作用,且容易不小心删除,造成不必要的麻烦。
2、查看定时任务运行日志
定时任务执行日志文件有两个,第一个是/var/log/corn
,我们可以一起查看一下:
/var/log/corn
这个文件可以显示我们执行的定时任务的历史记录,但是它只显示我们的定时任务执行了什么,不显示任务是否执行成功,或者我们写的定时任务是否有错,这样很不利于我们去查找问题,这时候我们可以查看更厉害的邮件日志。
第二个文件是我们的邮件日志/var/spool/mail/root
,这个文件我们是可以查看报错提示的。
如果显示以下问题,一般是网络连接有问题,家人们重启一下网络服务即可。
3、定时任务的结果定向到黑洞
这也是一个很好的书写习惯,在我们确保了脚本或定时任务的运行没有问题后,这样写避免了小文件等冗余数据的生成。解决了我们还要定期删除小文件的麻烦。
任何一件事情,只要心甘情愿,总是能够变得简单。
——林徽因