您好,欢迎来到创立网络工作室官方网站!ZJJCL.CN
新闻动态
您现在的位置:首页 > 技术文摘
Linux计划任务与日志管理
来源:创立工作室 作者:冯军 发布时间:2020-09-23 21:04:38 阅读 1423 次
  • 计划任务-at-cron-计划任务使用方法
  • 日志的种类和记录方式-自定义ssh服务日志类型和存储位置
  • 实战-日志切割-搭建远程日志收集服务器
  • 实战-配置公司内网服务器每天定时自动开关机

1、计划任务-at-cron-计划任务使用方法

计划任务的安排方式分为两种:
一种是定时性的:也就是例行。就是每隔一定的周期就要重复来做这个事情
一种是突发性的:就是这次做完了这个事情,下次就没有了。临时决定,只有一次执行

at和crontab这两个命令
at:可以处理仅执行一次就结束的命令
crontab:会把你指定的工作或任务,比如:脚本等,按照设定的周期循环执行

at命令使用方法:
语法:at 时间
服务名:atd
例1:查看at服务状态

[root@xuegod140 ~]# systemctl status atd #查看服务状态
[root@xuegod140 ~]# systemctl enable atd #开机启动atd服务
[root@xuegod140 ~]# systemctl disable atd #开机不启动atd服务
[root@xuegod140 ~]# systemctl start atd #开启atd服务
[root@xuegod140 ~]# systemctl stop atd #关闭atd服务

centos6查看开机启动服务:

[root@xuegod140 ~]# chkconfig --list | grep atd #7上无法执行

例2:使用at创建任务计划

[root@xuegod140 ~]# at 23:33 #23:33创建一个test目录
at> mkdir /tmp/test
at>
job 1 at Tue Apr 16 23:33:00 2019
[root@xuegod140 ~]# at -l #查看计划任务,atq也可以查看计划任务
1 Tue Apr 16 23:33:00 2019 a root
[root@xuegod140 ~]# ls -ld /tmp/test/
drwxr-xr-x 2 root root 6 Apr 16 23:33 /tmp/test/

注:任务执行完了后,会自动删除。

例3:at计划任务的特殊写法

[root@xuegod140 ~]# at now +50min #当前时间50分钟以后执行任务
[root@xuegod140 ~]# at 20:00 2019-4-17 #2019-4-17 20:00 执行任务
[root@xuegod140 ~]# at 6:00 +3days #三天以后的6:00执行任务

例4:at计划任务的目录文件

[root@xuegod140 ~]# ls /var/spool/at/a00002018b912b
/var/spool/at/a00002018b912b
[root@xuegod140 ~]# tail -3 !$
tail -5 /var/spool/at/a00002018b912b
rm -rf /tmp/test
marcinDELIMITER13ba1c4f
[root@xuegod140 ~]# atq
2Wed Apr 17 00:43:00 2019 a root
[root@xuegod140 ~]# at -c 2 | tail -3
rm -rf /tmp/test
marcinDELIMITER13ba1c4f

注:两种查看计划任务内容的方式,一种通过查看at的文件,一种at -c 任务号查看
注:在xshell终端中,如果按下ctrl+s,会锁定当前终端,无法使用;按下ctrl+q接触锁定

例5:计划任务的删除
命令:atrm 任务编号

[root@xuegod140 ~]# atq
2 Wed Apr 17 00:43:00 2019 a root
[root@xuegod140 ~]# atrm 2
[root@xuegod140 ~]# atq

2、crontab定时任务使用方法

crontab file是用来定义定时任务条目的文件,在Linux中,这个文件有存在几个地方
系统执行的工作 updatedb、whatis、/etc/cron.d/*
用户自己定义的任务文件 /var/spool/cron/USERNAME

cron命令参数:

  • crontab -u 用户名 #指定XX用户的cron服务
  • crontab -l #列出当前用户下的cron的详细内容
  • crontab -u zx -l #列出zx用户下的cron的详细内容
  • crontab -r #删除所有用户的cron内容,普通用户执行,只删除自己的cron内容
  • crontab -r -u zx #删除zx用户的cron内容
  • crontab -e #编辑cron服务

cron -e 编辑时的语法:
分为7个字段:分 时 日 月 周 用户 命令

  • 分:0-59取值
  • 时:0-23取值,24点即使0点
  • 日:1-31取值
  • 月:1-12取值,或者直接月份的英文单词
  • 周:0-6取值,0或者7表示星期天

特殊符号的含义:

  • *:任意/每
  • /:指定时间的间隔频率;*/10=每隔十分钟(位于分字段);0-23/2=每隔两小时
  • -:代表从某个数字到某个数字:8-17=8号到17号(日字段)
  • ,:分开几个离散的数字:6,10-13,20=6号,10号到13号,20号(日字段)

例1:cron服务的管理

[root@xuegod140 ~]# systemctl status crond
[root@xuegod140 ~]# systemctl start crond
[root@xuegod140 ~]# systemctl stop crond
[root@xuegod140 ~]# systemctl enable crond
[root@xuegod140 ~]# systemctl disable crond

例2:每天凌晨2点1分开始备份数据

[root@xuegod140 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l
1 2 * * * tar cf /opt/grub.tar /boot/grub/

例3:以zx用户,创建一个计划任务

[root@xuegod140 ~]# crontab -u zx -e
no crontab for zx - using an empty one
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l
1 2 * * * tar cf /opt/grub.tar /boot/grub/
[root@xuegod140 ~]# crontab -u zx -l #加上-u可以查看单个用户的计划任务
1 * * * * echo “hello word” > /dev/null

例4:查看所有的计划任务

-rw------- 1 root root 43 Apr 17 00:22 root
-rw------- 1 root root 41 Apr 17 00:25 zx
[root@xuegod140 ~]# cat !$/root
cat /var/spool/cron//root
1 2 * * * tar cf /opt/grub.tar /boot/grub/
[root@xuegod140 ~]# cat /var/spool/cron/zx
1 * * * * echo “hello word” > /dev/null

例5:每月的1,10,22号4:45分在/tmp/创建一个a.txt

[root@xuegod140 ~]# crontab -e
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l
45 4 1,10,22 * * touch /tmp/a.txt

例6:每月的1到10号的4:45,输入hello word

[root@xuegod140 ~]# crontab -e
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l
45 4 1-10 * * echo “hello word”

例7:每隔2天的8-11点的3分和15分,创建一个/tmp/b.txt

[root@xuegod140 ~]# crontab -e
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l
3,15 8-11 */2 * * touch /tmp/b.txt

例8:周一到周五的21:15,创建/tmp/d.txt

[root@xuegod140 ~]# crontab -e
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l
15 21 * * 1-5 touch /tmp/d.txt

例9:删除cron计划任务

[root@xuegod140 ~]# crontab -l
1 2 * * * tar cf /opt/grub.tar /boot/grub/
45 4 1,10,22 * * touch /tmp/a.txt
45 4 1-10 * * echo “hello word”
3,15 8-11 */2 * * touch /tmp/b.txt
15 21 * * 1-5 touch /tmp/d.txt
[root@xuegod140 ~]# crontab -r
[root@xuegod140 ~]# crontab -l
no crontab for root

注:cron计划任务中如果出现%号,必须加转义符,不然表示换行意思

例10:crontab不支持每秒。每10秒执行一次脚本

[root@xuegod140 ~]# crontab -e
crontab: installing new crontab
You have new mail in /var/spool/mail/root
[root@xuegod140 ~]# crontab -l

          • sleep 10;echo $(date +"%F %T") >> a.txt
          • sleep 20;echo $(date +"%F %T") >> a.txt # 黑点实际是*
          • sleep 30;echo $(date +"%F %T") >> a.txt
          • sleep 40;echo $(date +"%F %T") >> a.txt
          • sleep 50;echo $(date +"%F %T") >> a.txt

[root@xuegod140 ~]# cat a.txt
2019-04-17 01:06:11
2019-04-17 01:06:21
2019-04-17 01:06:31
2019-04-17 01:06:41
2019-04-17 01:06:51

3、系统级别的计划任务

系统任务调度配置文件

[root@xuegod140 ~]# ll /etc/crontab
-rw-r–r--. 1 root root 451 Jun 10 2014 /etc/crontab
[root@xuegod140 ~]# cat /etc/crontab
SHELL=/bin/bash #指定操作系统使用哪个shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #系统执行命令的搜索路径
MAILTO=root #将执行任务的信息通过mail发送给XX用户
For details see man 4 crontabs
Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr …
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |

          • user-name command to be executed # 黑点实际是*

我们也可以直接在配置文件中添加计划任务

/etc/con.d/目录下文件说明:
cron.deny #控制用户是否能做计划任务的文件;
cron.monthly #每月执行的脚本;
cron.weekly #每周执行的脚本;
cron.daily #每天执行的脚本;
cron.hourly #每小时执行的脚本;
crontab #主配置文件

4、案例要求:

每天2:00备份/etc/目录到/tmp/backup/目录下;
将备份命令写入一个脚本中
每天备份文件名要求格式:2017-08-19_etc.tar.gz
在执行计划任务时,不要输出任务信息
存放备份内容的目录要求只保留三天的数据
实验步骤:
创建备份文件的存放目录:

[root@xuegod140 ~]# mkdir /tmp/backup

编写执行脚本,因为需要备份/etc目录,所以需要使用到tar命令;
备份的文件只保留三天,所以需要删除三天以前的数据,使用find命令
将上述的两条命令,写到脚本文件

[root@xuegod140 ~]# vim back.sh
[root@xuegod140 ~]# cat back.sh
#!/bin/bash
find /tmp/backup/ -name “.tar.gz" -mtime +3 -delete
#find /tmp/backup/ -name "
.tar.gz” -mtime +3 -exec rm -rf {} ;
#find /tmp/backup/ -name “*.tar.gz” -mtime +3 | xagre rm -rf
tar zcvf /tmp/backup/date +%F_etc.tar.gz /etc

编写crontab任务,按照每天2:00备份,设置计划任务

[root@xuegod140 ~]# crontab -e
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l #因为需要立即看到实验效果,所以时间不同
39 20 * * * bash /root/back.sh &> /dev/null
[root@xuegod140 ~]# ls /tmp/backup/
2019-04-17_etc.tar.gz

这里为了能看到find的命令的效果,我们先修改日期后,手动执行脚本文件

[root@xuegod140 ~]# date -s “2019-04-18”
[root@xuegod140 ~]# date
Thu Apr 18 00:05:56 CST 2019
[root@xuegod140 ~]# bash back.sh
[root@xuegod140 ~]# date -s “2019-04-19”
Fri Apr 19 00:00:00 CST 2019
[root@xuegod140 ~]# bash back.sh
[root@xuegod140 ~]# date -s “2019-04-20”
Sat Apr 20 00:00:00 CST 2019
[root@xuegod140 ~]# date -s “2019-04-21”
Sun Apr 21 00:00:00 CST 2019
[root@xuegod140 ~]# bash back.sh
[root@xuegod140 ~]# ll /tmp/backup/
total 52520
-rw-r–r-- 1 root root 10755840 Apr 19 00:00 2019-04-19_etc.tar.gz
-rw-r–r-- 1 root root 10755840 Apr 20 00:00 2019-04-20_etc.tar.gz
-rw-r–r-- 1 root root 10755840 Apr 21 00:00 2019-04-21_etc.tar.gz

注:-mtime +3 :不包含当前的天数,往前数三天

5、日志的种类

在centos7中,系统日志消息有两个服务负责处理:systemd-journald和rsyslog
常见日志文件概述:/var/log目录保管由rsyslog维护的,里面存放的一些特定于系统和服务的日志文件
日志文件 用途
/var/log/message 大多数系统日志消息记录在此处。有也例外的:如与身份验证,电子邮件处理相关的定期作业任务等
/var/log/secure 安全和身份验证相关的消息和登录失败的日志文件。 ssh远程连接产生的日志
/var/log/maillog 与邮件服务器相关的消息日志文件
/var/log/cron 与定期执行任务相关的日志文件
/var/log/boot.log 与系统启动相关的消息记录
/var/log/dmesg 与系统启动相关的消息记录

例1:查看那个IP地址经常暴力破解系统用户密码

[root@xuegod140 log]# ssh root@192.168.1.140 #先故意输错3次密码
[root@xuegod140 log]# grep -i failed /var/log/secure #-i忽略大小写,查看登录失败的信息
Apr 17 01:08:01 xuegod140 CROND[5527]: pam_systemd(crond:session): Failed to release session: Interrupted system call
Apr 21 20:25:01 xuegod140 sshd[1920]: Failed password for root from 192.168.1.140 port 43712 ssh2
Apr 21 20:25:04 xuegod140 sshd[1920]: Failed password for root from 192.168.1.140 port 43712 ssh2
Apr 21 20:25:07 xuegod140 sshd[1920]: Failed password for root from 192.168.1.140 port 43712 ssh2
[root@xuegod140 log]# grep -i failed /var/log/secure | awk ‘{print $11}’ #打印第11列内容
192.168.1.140
192.168.1.140
192.168.1.140
[root@xuegod140 log]# grep -i failed /var/log/secure | awk ‘{print $11}’| uniq -c #uniq 去除重复项,-c 统计个数
3 192.168.1.140

例2:/var/log/wtmp文件作用
wtmp是一个二进制文件,记录每个用户登录次数和持续时间等信息

[root@xuegod140 log]# last
root pts/0 192.168.1.188 Sun Apr 21 20:15 still logged in
#登录用户 虚拟终端 登录终端的IP 登录日志 仍然登录中
root pts/1 192.168.1.188 Wed Apr 17 20:23 - down (2+03:52)

可以使用last命令输入wtmp中的内容,last 显示到目前为止,成功登录系统的记录
或者:

[root@xuegod140 log]# last -f /var/log/wtmp
root pts/0 192.168.1.188 Sun Apr 21 20:15 still logged in
reboot system boot 3.10.0-862.el7.x Wed May 22 11:29 - 20:36 (10196+10:07

例3:/var/log/btmp文件作用
查看暴力破解系统用户;btmp文件记录错误登录系统的日志,如果发现此文件大于1M,就就说明有很多人在暴力破解ssh服务,此日志需要用lastb命令查看

[root@xuegod140 log]# lastb #可以看到刚刚登录失败的三次记录
root ssh:notty 192.168.1.140 Sun Apr 21 20:25 - 20:25 (00:00)
root ssh:notty 192.168.1.140 Sun Apr 21 20:25 - 20:25 (00:00)
root ssh:notty 192.168.1.140 Sun Apr 21 20:25 - 20:25 (00:00)
[root@xuegod140 log]# ll -h btmp #此文件大于1M,就说明有人暴力破解
-rw-------. 1 root utmp 1.5K Apr 21 20:25 btmp

例4:btmp文件信息过多时,我们需要查看某个IP地址的暴力破解次数

[root@xuegod140 log]# lastb | awk ‘{print $3}’ |sort -n|uniq -c #查看所有登录失败的IP地址
3 192.168.1.140
或者
[root@xuegod140 log]# lastb | awk ‘{print $3}’ | grep 192.168.1.140 | wc -l #查看某个IP地址
3

例5:清空日志
方法1:

[root@xuegod140 log]# > /var/log/secure #使用重定向清空日志文件

方法二:

[root@xuegod140 log]# rm -rf /var/log/btmp && touch /var/log/btmp #先删除后创建

上述两种方法,建议使用第一种,使用方法二,新创建的文件会重新生成inode号,服务使用的还是旧的inode号和文件描述符,需要手动重启服务加载新的inode号才生效。
方法一,不改变文件的inode和描述符信息。

5、日志的记录方式

分类和级别
日志的分类:
daemon 后台进程相关
kern 内核产生的信息
lpr 打印系统产生的
authpriv 安全认证相关
cron 计划任务相关
mail 邮件相关
syslog 日志服务本身的
news 新闻系统
local0-7 自定义的日志设备
local0-7 8个系统保留的类,供其它的程序使用或者是用户自定义

日志的级别
从轻>>>重

6、rsyslog日志服务

rhel5 服务名称syslog 配置文件 /etc/syslog.conf
rhel6/7 服务名称rsyslog 配置文件/etc/rsyslog.conf
查看配置文件信息:

[root@xuegod140 ~]# grep -v “#|$” /etc/rsyslog.conf
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.
 /var/log/secure
mail.
 -/var/log/maillog
cron.* /var/log/cron
.emerg :omusrmsg:
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log

注释:
#UDPServerRun 514 #允许 514 端口接收使用 UDP 协议转发过来的日志
#InputTCPServerRun 514 #允许 514 端口接收使用 TCP 协议转发过来的日志

例:kern.* /dev/console #所有内核级别的日志存放到/dev/console
.info;mail.none #所有类型的info级别,除mail类型外
authpriv.
 #所有认证级别的日志存放到 /var/log/secure
cron.* #计划任务类型的所有级别存放到 /var/log/cron
.emerg #所有类型的紧急级别,存放到 :omusrmsg:
local7.* #local7类型的所有级别,存放到 /var/log/boot.log
注:
mail.* -/var/log/maillog
“-”:邮件的信息比较多,先将数据存储到内存,达到一定大小,全部写到硬盘。有利于减少硬盘IO进程的开销,数据存储在内存,如果关机不当数据消失。

7、日志输入的规则

.info 大于等于info级别的信息全部记录到某个文件
.=级别 仅记录等于某个级别的日志
例:.=info 只记录info级别的日志
.! 级别 除了某个级别以外,记录所有的级别信息
例:.!err 除了err级别以外,记录其它所有级别所有信息
.none 指的是排除某个类别
例: mail.none mail类型的所有级别都不记录

实战:自定义ssh服务的日志类型和存放位置
第一:修改ssh服务配置文件sshd.conf存放日志的类别
复制原来的日志存放类别,然后自定义一个local0类别

[root@xuegod140 ~]# vim /etc/ssh/sshd_config
32 #SyslogFacility AUTHPRIV
33 SyslogFacility local0

第二:修改系统日志配置文件rsyslog.conf的分类和级别
增加新的local0分类的所有级别存放到/var/log/sshd.log

[root@xuegod140 ~]# vim /etc/rsyslog.conf
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
74 local0.* /var/log/sshd.log

第三:重启服务

[root@xuegod140 ~]# systemctl restart rsyslog.service
[root@xuegod140 ~]# systemctl restart sshd

第四:查看ssh服务日志文件

[root@xuegod140 ~]# ls /var/log/sshd.log
/var/log/sshd.log
[root@xuegod140 ~]# cat !$
cat /var/log/sshd.log
Apr 22 00:36:11 xuegod140 sshd[5223]: Server listening on 0.0.0.0 port 22.
Apr 22 00:36:11 xuegod140 sshd[5223]: Server listening on :: port 22.

第五:使用ssh登录,进行测试
第一次登录失败,第二次登录成功,查看日志文件

[root@xuegod140 ~]# tail -2 /var/log/sshd.log
Apr 22 00:38:18 xuegod140 sshd[5250]: Failed password for root from 192.168.1.103 port 51101 ssh2
Apr 22 00:38:21 xuegod140 sshd[5250]: Accepted password for root from 192.168.1.103 port 51101 ssh2

注:没有修改前,ssh服务的所有日志都是存放到/var/log/secure文件中

8、日志切割

在 linux 下的日志会定期进行滚动增加,我们可以在线对正在进行回滚的日志进行指定大小的切割(动态),如果这个日志是静态的。比如没有应用向里面写内容。那么我们也可以用 split 工具进行切割;其中 Logrotate 支持按时间和大小来自动切分,以防止日志文件太大。
logrotate命令配置文件:
主配置文件/etc/logrotate.conf
切割文件:/etc/logrotate.d/ #所有需要自定义的日志切割都需要防止到这个目录下
logrotate的执行是由cornd服务调用的。

切割配置文件的其它参数说明:
monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
rotate 5: 一次将存储 5 个归档日志。对于第六个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用 gzip 进行压缩。
minsize:小于1M不切割;maxsize:大于多少进行切割
delaycompress: 总是不 compress 选项一起用,delaycompress 选项指示 logrotate 不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty: 如果日志文件为空,轮循不会进行。
create 644 root root: 以指定的权限创建全新的日志文件,同时 logrotate 也会重命名原始日志文件。
postrotate/endscript: 在所有其它指令完成后,postrotate 和 endscript 里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
/var/lib/logrotate/status 中默认记录 logrotate 上次轮换日志文件的时间。

例1:查看logrotate切割的计划任务:

[root@xuegod140 ~]# ls /etc/cron.daily/logrotate
/etc/cron.daily/logrotate
[root@xuegod140 ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ E X I T V A L U E ! = 0 ] ; t h e n / u s r / b i n / l o g g e r − t l o g r o t a t e " A L E R T e x i t e d a b n o r m a l l y w i t h [ EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [EXITVALUE!=0];then/usr/bin/loggertlogrotate"ALERTexitedabnormallywith[EXITVALUE]"
fi
exit 0

例2:查看logrotate.conf文件

[root@xuegod140 ~]# grep -v ^$ /etc/logrotate.conf
#see “man logrotate” for details
#rotate log files weekly
weekly #按周进行切割;也可以按天、月、年等切割
#keep 4 weeks worth of backlogs
rotate 4 #保留4份,不含自身的一份
#create new (empty) log files after rotating old ones
create #切割后创建新文件
#use date as a suffix of the rotated file
dateext #以日期作为后缀进行切割
#uncomment this if you want your log files compressed
#compress # 是否需要压缩日志
#RPM packages drop log rotation information into this directory
include /etc/logrotate.d #将需要切割的日志切割文件放到这个目录内
#no packages own wtmp and btmp – we’ll rotate them here
/var/log/wtmp {
monthly #按月切割
create 0664 root utmp #创建文件,权限0664 ,用户root,属组utmp
minsize 1M #文件大小1M,进行切割
rotate 1 #保留一份,不包含自身
}
/var/log/btmp {
missingok #忽略错误信息
monthly #按月切割
create 0600 root utmp #创建新文件等
rotate 1 #保留一份
}
#system-specific logs may be also be configured here.

例3:查看/etc/logrotate.d/目录下的文件

[root@xuegod140 ~]# cd /etc/logrotate.d/
[root@xuegod140 logrotate.d]# ls
bootlog cups iscsiuiolog libvirtd.qemu ppp samba wpa_supplicant
chrony httpd libvirtd numad psacct syslog yum
[root@xuegod140 logrotate.d]# cat syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler #对以上目录按照如下标准进行切割
{
missingok #忽略错误
sharedscripts #使用脚本 postrotate #开始脚本
/bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null 2> /dev/null || true
endscript #结束脚本
}

例4:系统日志切割流程
(1)logrotate的启动脚本被放在了Crontab每天执行的脚本目录中/etc/cron.daily,这样Crontab每天都会执行一次logrotate;

(2)logrotate启动的时候,使用了配置文件/etc/logrotate.conf;

(3) 配置/etc/logrotate.conf中又引入了目录:/etc/logrotate.d;

(4)我们在/etc/logrotate.d目录下建立自己的logrotate配置文件;

(5)这样,当logrotate启动的时候就会执行一次转储,从而按照我们的配置来转储我们指定的日志文件。

例5:使用dd命令生产两个文件,进行切割

[root@xuegod140 opt]# dd if=/dev/zero of=acce.log bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.121766 s, 861 MB/s
[root@xuegod140 opt]# dd if=/dev/zero of=accf.log bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.0632254 s, 829 MB/s
[root@xuegod140 opt]# ll -h
total 150M
-rw-r–r-- 1 root root 100M Apr 22 02:15 acce.log
-rw-r–r-- 1 root root 50M Apr 22 02:15 accf.log
[root@xuegod140 log]# cd /etc/logrotate.d/
[root@xuegod140 opt]# vim /etc/logrotate.d/acc
[root@xuegod140 opt]# cat /etc/logrotate.d/acc
/opt/*.log
{
daily
maxsize 80M
missingok
rotate 3
dateext
create 0644 root root
}
[root@xuegod140 ~]# logrotate -dv /etc/logrotate.d/acc
reading config file /etc/logrotate.d/acc
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /opt/acce.log
/opt/accf.log
after 1 days (3 rotations)
empty log files are rotated, log files >= 83886080 are rotated earlier, old logs are removed
considering log /opt/acce.log
log needs rotating
considering log /opt/accf.log
log does not need rotating (log has been rotated at 2019-4-22 2:17, that is not day ago yet)
rotating log /opt/acce.log, log->rotateCount is 3
dateext suffix ‘-20190422’
glob pattern ‘-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’
glob finding old rotated logs failed
renaming /opt/acce.log to /opt/acce.log-20190422
creating new /opt/acce.log mode = 0644 uid = 0 gid = 0
[root@xuegod140 opt]# systemctl restart rsyslog.service

强制切割

[root@xuegod140 ~]# logrotate -fv /etc/logrotate.d/acc
reading config file /etc/logrotate.d/acc
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /opt/acce.log
/opt/accf.log
forced from command line (3 rotations)
empty log files are rotated, log files >= 83886080 are rotated earlier, old logs are removed
considering log /opt/acce.log
log needs rotating
considering log /opt/accf.log
log needs rotating
rotating log /opt/acce.log, log->rotateCount is 3
dateext suffix ‘-20190422’
glob pattern ‘-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’
glob finding old rotated logs failed
renaming /opt/acce.log to /opt/acce.log-20190422
creating new /opt/acce.log mode = 0644 uid = 0 gid = 0
rotating log /opt/accf.log, log->rotateCount is 3
dateext suffix ‘-20190422’
glob pattern ‘-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’
glob finding old rotated logs failed
renaming /opt/accf.log to /opt/accf.log-20190422
creating new /opt/accf.log mode = 0644 uid = 0 gid = 0
[root@xuegod140 ~]# ls /opt/
acce.log acce.log-20190422 accf.log accf.log-20190422
[root@xuegod140 ~]# ll -h /opt/
total 150M
-rw-r–r-- 1 root root 0 Apr 22 19:32 acce.log
-rw-r–r-- 1 root root 100M Apr 22 02:23 acce.log-20190422
-rw-r–r-- 1 root root 0 Apr 22 19:32 accf.log
-rw-r–r-- 1 root root 50M Apr 22 02:23 accf.log-20190422

9、配置远程日志服务器-实现日志集中的管理
实验拓扑图:

server端配置

[root@xuegod63 ~]# vim /etc/rsyslog.conf # 使用TCP协议方式,收集日志
改:19 #KaTeX parse error: Expected 'EOF', got '#' at position 22: …d imtcp 20 #̲InputTCPServerRun 514
为:
19 $ModLoad imtcp
20 $InputTCPServerRun 514

注:使用UDP协议速度快不保证数据的完整,使用TCP协议可靠.完整

[root@xuegod63 ~]# systemctl restart rsyslog #重新启动 rsyslog

查看服务监听的状态:

[root@xuegod63 ~]# netstat -anlpt| grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 45631/rsyslogd
tcp6 0 0 :::514 ::? LISTEN 45631/rsyslogd

服务端验证:
在服务端关闭selinux和防火墙

[root@xuegod63 ~]# getenforce
Enforcing
[root@xuegod63 ~]# setenforce 0 #关闭selinux功能
[root@xuegod63 ~]#getenforce
Permissive
[root@xuegod63 ~]# systemctl stop firewalld
[root@xuegod63 ~]# systemctl status firewalld
[root@xuegod63 ~]# iptables -F #清空防火墙规则

client端配置
登录xuegod64.cn

[root@xuegod63 ~]# vim /etc/rsyslog.conf #在90行之后,插入
. @@192.168.1.63:514

注: . 所有类别和级别的日志 ; @@192.168.1.63:514 远端tcp协议的日志服务端的IP和端口
重启rsyslog 服务

[root@xuegod64 ~]# systemctl restart rsyslog.service

查看日志:

[root@xuegod63 ~]# tail -f /var/log/messages | grep xuegod64 --color #动态查看日志

在客户端xuegod64进行测试
语法: logger 要模拟发送的日志

[root@xuegod64 ~]# logger “aaaaa”
[root@xuegod63 ~]# tail -f /var/log/messages | grep xuegod64 --color #服务器端到查看消息
May 21 16:32:16 xuegod64 root: aaaaa

注:
总结:服务器使用udp协议,客户端只能使用的配置文件中这一行只能有一个@
. @192.168.1.64:514
服务器使用tcp协议,客户端只能使用的配置文件中这一行必须有两个@@
. @@192.168.1.64:514