一、什么是计划任务
计划任务就是在指定时间、日期执行预先计划好的系统管理任务。通过atd和cron(crond)这两个系统服务来实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。首先来认识一下crond和atd。
1.1 cron
(1)理解cron
cron 是负责调度和运行周期命令(每天,每周,等)的守护进程 ,在Linux系统中,许多任务都会被调度执行,比如在日志更新、备份、维护脚本等方面。默认情况下,所有用户都可以运行计划任务,每个用户都有他们自己的crontab。
(2)访问控制
有时出于对安全性的考虑,可以通过授权文件/etc/cron.allow
来限制用户对cron的访问,即允许某个或某些用户有权进行调度,当然也可以通过/etc/cron.deny
拒绝某个或某些用户的调度。cron软件包默认包含一些可执行的调度命令:
- 每小时运行在
/etc/cron.hourly/
文件夹内的程序; - 每天运行在
/etc/cron.daily/
文件夹内的程序; - 每周运行在
/etc/cron.weekly/
文件夹内的程序; - 每月运行在
/etc/cron.monthly/
文件夹内的程序。
(3)cron调度执行周期
- 分钟(0-59)
- 小时(0-23)
- 日期(1-31)
- 月份(1-12)
- 星期(0-7 说明:0和7均表示星期日)
- crontab二进制可执行文件命令的绝对路径
/usr/sbin/crontab
- 命令要执行的相关文件
语法格式:
=========================================================================================
* * * * * *
Minutes Hours Day-of-Month Month Day-of-Week Command
分钟 小时 日 月 周 执行的命令,最好是命令的绝对路径
0-59 0-23 1-31 1-12 0-7
=========================================================================================
时间说明:
=========================================================================================
*: 每
*/5: 每隔分钟
,: 不同的时间段
- : 表示范围
实例:
00 00 * * * /usr/sbin/logrotate /etc/logrotate.conf #每天凌晨进行日志轮转
00 02 * * * /usr/sbin/logrotate /etc/logrotate.conf #每天2:00整...
00 02 1 * * /usr/sbin/logrotate /etc/logrotate.conf #每月1号2:00整...
00 02 14 2 * /usr/sbin/logrotate /etc/logrotate.conf #每年2月14号2:00整...
00 02 * * 7 /usr/sbin/logrotate /etc/logrotate.conf #每周日2:00整...
00 02 * 6 5 /usr/sbin/logrotate /etc/logrotate.conf #每年6月的周五2:00整...
*/5 * * * * /usr/sbin/logrotate /etc/logrotate.conf #每隔5分钟...
00 02 1,5,8 * * /usr/sbin/logrotate /etc/logrotate.conf #每月1,5,8号的2:00整...
00 02 1-8 * * /usr/sbin/logrotate /etc/logrotate.conf #每月1到8号的2:00整...
(4)cron循环调度执行实例
使用root用户创建计划任务
- 安装crontabs
yum -y install crontabs
- 启动服务并做开机启动
systemctl start crond.service systemctl enable crond.service
- 创建测试文件
vim /home/test.sh chmod +x /home/test.sh
- 添加到计划任务
crontab -e crontab -l --查看当前用户所有的计划任务
- 查看测试结果
使用其他用户创建计划任务
- 创建测试文件
vim /home/test.sh chmod +x /home/test.sh
- 添加到计划任务
crontab -u xiaojie -e crontab -u xiaojie -l --查看xiaojie用户所有的计划任务
- 查看测试结果
1.2 at
(1)理解at
at 在未来的特定时间运行某个命令,以命令行参数的模式在指定的时间与日期运行,并把结果以标准方式键入。 其主要用于一次性的调度执行。
(2)语法格式
at <时间格式>
at now +5min --表示5分钟后执行
at august 3 2021 --表示在2021年8月3日执行
...
(3)at一次性调度执行实例
-
安装at
yum -y install at
-
启动服务并做开机启动
systemctl start atd systemctl enable atd
-
一次性调度执行
案例1: at now +1min at> useradd DJ at> <EOT> --Ctrl+D 结束 案例2: vim at.jobs useradd DJ1 useradd DJ2 mkdir /home/123.txt at 18:30 < at.jobs --在下午6点半时执行at.jobs文件 ...
-
查看测试结果(案例1)
二、日志轮转
2.1 日志文件的功能
在Linux系统中,日志对于管理员或其他用户来说是很重要的。在程序运行过程中,Linux系统和许多程序会产生各种错误信息、告警信息和其他提示信息,这些信息都将会记录到相应的日志文件中去,实际上日志文件就是用于记录系统、程序运行中所进行的各种操作,这样在系统出现问题时可通过日志文件回溯追踪。
2.2 日志文件的分类
- 内核及系统日志
这种类型的日志是由rsyslog进行管理,其可以根据日志的类别和优先级保存到不同的日志文件中。 - 用户日志
这种类型的日志用于记录系统用户登录及退出系统的相关信息。 - 程序日志
这是一种由各种应用程序独立管理的日志文件,其记录的格式不统一。
2.3 日志保存的位置
对于Linux操作系统而言,其日志文件默认存放在/var/log/
下,有的程序共用的是一个日志文件,而有的是使用单独的日志文件。对于某些大型的服务器程序而言,其日志文件不止一个,因此通常会在/var/log/
下建立相应的子目录来存放日志文件,下面看一下主要的日志文件。
- 系统主日志文件
/var/log/messages - 计划任务日志
/var/log/cron - 系统启动相关日志
/var/log/dmesg - 用户登录日志
/var/log/lastlog
/var/log/secure
/var/log/btmp
/var/log/wtmp - 记录邮件postfix相关的日志文件
/var/log/maillog
2.4 日志消息的级别
- 0 EMERG:内核崩溃等严重信息;
- 1 ALERT:需要立刻修改的信息;
- 2 GRIT:严重级别,阻止整个系统或者整个软件不能工作的信息;
- 3 ERR:错误级别,阻止某个功能或者模块不能正常工作的信息;
- 4 WARNING:警告级别,可能会影响系统功能的信息;
- 5 NOTICE:不会影响系统功能但需要注意;
- 6 INFO:一般信息(常用);
- 7 DEBUG:程序或系统调试信息。
2.5 logrotate日志轮转
(1)什么是 logrotate?
logrotate是一个日志管理程序 ,用于对旧日志文件的切割、轮转并创建新的日志文件,通常logrotate日志轮转是配合计划任务来共同完成的,起到一个“转储”的作用。同时logrotate还可以压缩日志文件,以及把日志发送到指定的邮箱。logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate
,日志轮转是系统自动完成的,我们可以看一下该脚本内容。
(2)logrotate 配置文件
在我们的Linux系统中,它默认安装了logrotate工具。其主配置文件默认为/etc/logrotate.conf
,还有一个子配置文件目录 /etc/logrotate.d/
,它包含于主配置文件中, 我们可以将需要轮转的日志配置放在这个目录下面,则该目录里的所有文件都会被主动的读入/etc/logrotate.conf
中执行。另外logrotate的状态文件在/var/lib/logrotate/logrotate.status
,它记录了上一次文件的运行状态。
- logrotate.conf 主配置文件
- logrotate.d 子配置文件下轮转的日志
(3)logrotate 日志轮转实例
手动轮转
- 配置需要轮转的日志(这里使用yum日志来演示)
vim /etc/logrotate.d/yum
- 进行日志轮转测试
/usr/sbin/logrotate /etc/logrotate.conf --下图是我手动轮转4次的结果(实验的话需每次修改系统时间,因为轮转的周期是每天) --在上图中没有指定轮转保留的日志份数,故执行的是主配置文件logrotate.conf中的rotate 4
--当我再进行第5次手动轮转时,会自动切割旧的日志(相当于还是只保留4份),并新增第5次轮转的日志。
自动轮转(配合计划任务)
- 添加计划任务
crontab -e
- 测试结果
通过计划任务,这样就可以每天进行日志的轮转了,如果需要对其他日志进行日志轮转,把对应的日志添加到计划任务即可。
(4)日志安全(操作日志的隐藏权限)
这里注意一下,我们可以给日志一些安全权限,比如a
权限,如果大家对a
权限不了解或忘了的话,可以去看我之前的博客Linux系统之文件权限管理看一下。
vim /etc/logrotate.d/syslog
配置好后,和上述步骤一样,添加到计划任务进行循环调度即可。
【注意】:通常我们是直接执行crontab -e
命令来添加计划任务,实际上其存储位置在/var/spool/cron/当前登录系统的用户名
,比如我当前的用户是root,那么他的计划任务存储的位置为/var/spool/cron/root
,如果是其他用户zhuzhu,那么他的计划任务存储的位置为/var/spool/cron/zhuzhu
,我们添加的计划任务都保存在了root和zhuzhu文件中。
crontab命令常用参数:
-e #编辑当前用户的计划任务
-l #列出当前用户的计划任务
-r #删除当前用户所有的计划任务
三、总结
-
计划任务:
- 在进行计划任务时,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置;
- cron实现循环调度执行;
- at实现一次性调度执行;
- 计划任务存储路径:/var/spool/cron/;
- 使用者权限文件:
- 该文件中所列用户不允许使用crontab命令:/etc/cron.deny;
- 该文件中所列用户允许使用crontab命令:/etc/cron.allow;
- 系统本身的计划任务:/etc/crontab。
-
logrotate日志轮转:
-
日志轮转可以针对任何日志文件;
-
如果没有日志轮转,日志文件会越来越大;
-
日志轮转会丢弃系统中最旧的日志文件,以节省空间;
-
日志轮转可分为手动轮转和结合计划任务的自动调度轮转;
-
logrotate本身不是系统守护进程,它是通过计划任务crond每天执行;
-
轮转日志的主配置文件为:/etc/logrotate.conf (决定每个日志文件如何轮转)。
-