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

时间:2020-9-6 作者:admin


目录

一、什么是计划任务

计划任务就是在指定时间、日期执行预先计划好的系统管理任务。通过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
    

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

  • 添加到计划任务
    crontab -e
    crontab -l   --查看当前用户所有的计划任务
    

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

  • 查看测试结果
    Linux系统之计划任务及日志轮转

使用其他用户创建计划任务

  • 创建测试文件
    vim /home/test.sh
    chmod +x /home/test.sh
    

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

  • 添加到计划任务
    crontab -u xiaojie -e
    crontab -u xiaojie -l    --查看xiaojie用户所有的计划任务
    

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

  • 查看测试结果
    Linux系统之计划任务及日志轮转

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)
    Linux系统之计划任务及日志轮转

二、日志轮转

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,日志轮转是系统自动完成的,我们可以看一下该脚本内容。
Linux系统之计划任务及日志轮转
(2)logrotate 配置文件
在我们的Linux系统中,它默认安装了logrotate工具。其主配置文件默认为/etc/logrotate.conf,还有一个子配置文件目录 /etc/logrotate.d/,它包含于主配置文件中, 我们可以将需要轮转的日志配置放在这个目录下面,则该目录里的所有文件都会被主动的读入/etc/logrotate.conf中执行。另外logrotate的状态文件在/var/lib/logrotate/logrotate.status,它记录了上一次文件的运行状态。

  • logrotate.conf 主配置文件
    Linux系统之计划任务及日志轮转
  • logrotate.d 子配置文件下轮转的日志
    Linux系统之计划任务及日志轮转

(3)logrotate 日志轮转实例

手动轮转

  • 配置需要轮转的日志(这里使用yum日志来演示)
    vim /etc/logrotate.d/yum 
    

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

  • 进行日志轮转测试
    /usr/sbin/logrotate /etc/logrotate.conf
    --下图是我手动轮转4次的结果(实验的话需每次修改系统时间,因为轮转的周期是每天)
    --在上图中没有指定轮转保留的日志份数,故执行的是主配置文件logrotate.conf中的rotate 4
    

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

    --当我再进行第5次手动轮转时,会自动切割旧的日志(相当于还是只保留4份),并新增第5次轮转的日志。
    

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

自动轮转(配合计划任务)

  • 添加计划任务
    crontab -e
    

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

  • 测试结果
    Linux系统之计划任务及日志轮转
    通过计划任务,这样就可以每天进行日志的轮转了,如果需要对其他日志进行日志轮转,把对应的日志添加到计划任务即可。

(4)日志安全(操作日志的隐藏权限)
这里注意一下,我们可以给日志一些安全权限,比如a权限,如果大家对a权限不了解或忘了的话,可以去看我之前的博客Linux系统之文件权限管理看一下。

vim /etc/logrotate.d/syslog

Linux系统之计划任务及日志轮转
配置好后,和上述步骤一样,添加到计划任务进行循环调度即可。

【注意】:通常我们是直接执行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 (决定每个日志文件如何轮转)。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。