下你所需,载你所想!
IT技术源码资料下载网站

Linux系统添加计划任务及日志轮转

:其他软件 2020-09-07 10:47:52

Linux系统添加计划任务及日志轮转

一、什么是计划任务
计划任务就是在指定时间、日期执行预先计划好的系统管理任务。通过atd和cron(crond)这两个系统服务来实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。首先来认识一下crond和atd。
1.1 cron
(1)理解cron
cron 是负责调度和运行周期命令(每天,每周,等)的守护进程 ,在Linux系统中,许多任务都会被调度执行,比如在日志更新、备份、维护脚本等方面。默认情况下,所有用户都可以运行计划任务,每个用户都有他们自己的crontab。
每小时运行在/etc/cron.hourly/文件夹内的程序;
每天运行在 /etc/cron.daily/ 文件夹内的程序;
每周运行在 /etc/cron.weekly/ 文件夹内的程序;
每月运行在 /etc/cron.monthly/ 文件夹内的程序。
(2)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> --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 (决定每个日志文件如何轮转)。