目录
1. rsyslog简介
2. 查看/var/log
3. syslog的配置文件
3.1 /etc/rsyslog.d/50-default.conf
3.2 /etc/rsyslog.conf
4. 如何写入syslog
4.1 C语言
4.2 shell
4.3 内核输出
5. syslog.1和syslog.2.gz等文件是如何生成
6. logrotate是如何被执行
7. 如何限制syslog的大小为500M以内
8. 与syslog有关的三个程序
-
1. rsyslog简介
Rsyslog 是一个 syslogd 的多线程增强版,依然基于Syslog协议(linux6之前默认使用syslog程序,centos6用rsyslog所取代)完成系统日志的处理转发,官方形容它是一个极速(如火箭般快速)的日志处理系统。
它的作用是为了保存相关程序的运行状态、错误信息等,为了对系统进行分析、保存历史记录以及在出现错误时发现、分析错误使用。
它主要用来采集日志,本身不生产日志。
2. 查看/var/log
user@localhost:/var/log$ ll
total 2696
drwxrwxr-x 7 root syslog 4096 Jan 25 01:51 ./
drwxr-xr-x 14 root root 4096 Jul 28 2021 ../
drwxr-xr-x 2 root root 4096 Sep 12 06:26 apt/
-rw-r----- 1 syslog adm 60238 Jan 25 02:01 auth.log
-rw-r----- 1 syslog adm 45916 Jan 21 06:25 auth.log.1
-rw-r----- 1 syslog adm 3446 Jan 14 06:25 auth.log.2.gz
-rw-r----- 1 syslog adm 2278 Jan 8 06:25 auth.log.3.gz
-rw-r----- 1 syslog adm 1914 Jan 3 06:25 auth.log.4.gz
-rw-rw---- 1 root utmp 3200 Jan 25 01:52 btmp #记录错误登录的日志,二进制文件,使用lastb命令查看
-rw-rw---- 1 root utmp 0 Dec 1 06:25 btmp.1
drwxr-xr-x 2 _chrony _chrony 4096 Aug 25 2020 chrony/
-rw-r--r-- 1 root root 0 Dec 8 06:25 dpkg.log
-rw-r--r-- 1 root root 798 Dec 6 06:36 dpkg.log.1
-rw-r--r-- 1 root root 803 Nov 21 08:21 dpkg.log.2.gz
-rw-r--r-- 1 root root 997 Sep 11 09:05 dpkg.log.3.gz
-rw-r----- 1 syslog adm 699919 Jan 24 22:17 kern.log
-rw-r----- 1 syslog adm 40633 Jan 21 05:23 kern.log.1
-rw-r----- 1 syslog adm 56333 Jan 12 05:52 kern.log.2.gz
-rw-r----- 1 syslog adm 40471 Jan 8 01:46 kern.log.3.gz
-rw-r----- 1 syslog adm 86712 Jan 3 06:11 kern.log.4.gz
-rw-rw-r-- 1 root utmp 296296 Jan 25 01:56 lastlog #记录系统中所有用户最后一次登录时间的日志,二进制文件,使用lastlog命令查看
-rw-r----- 1 syslog adm 1190210 Jan 25 01:56 syslog
-rw-r----- 1 syslog adm 237999 Jan 24 06:25 syslog.1
-rw-r----- 1 syslog adm 3059 Jan 23 06:25 syslog.2.gz
-rw-r----- 1 syslog adm 16078 Jan 22 06:25 syslog.3.gz
-rw-r----- 1 syslog adm 15477 Jan 21 06:25 syslog.4.gz
-rw-r----- 1 syslog adm 1334 Jan 20 06:25 syslog.5.gz
-rw-r----- 1 syslog adm 1298 Jan 19 06:25 syslog.6.gz
-rw-r----- 1 syslog adm 3723 Jan 18 06:25 syslog.7.gz
-rw-r--r-- 1 root root 2604 Jan 10 01:20 ubuntu-advantage-timer.log
-rw-r--r-- 1 root root 550 Dec 8 06:19 ubuntu-advantage-timer.log.1
-rw-r--r-- 1 root root 1388 Dec 1 03:34 ubuntu-advantage-timer.log.2.gz
-rw-r--r-- 1 root root 496 Nov 1 05:12 ubuntu-advantage-timer.log.3.gz
-rw-r--r-- 1 root root 913 Oct 9 04:50 ubuntu-advantage-timer.log.4.gz
drwxr-xr-x 2 root root 4096 Dec 8 06:25 unattended-upgrades/
-rw-rw-r-- 1 root utmp 80000 Jan 25 01:56 wtmp #永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机时间。二进制文件,使用last命令查看。
-rw-rw-r-- 1 root utmp 42400 Jan 3 05:56 wtmp.1
上面标记红色的文件为所有owner为syslog的文件,均为与rsyslogd进程有关的文件。
3. syslog的配置文件
syslog的配置文件有:
/etc/rsyslog.d/50-default.conf
/etc/rsyslog.conf
3.1 /etc/rsyslog.d/50-default.conf
这个文件标明了syslog的每个文件是怎么生成的。文件内容为:
# Default rules for rsyslog.
#
# For more information see rsyslog.conf(5) and /etc/rsyslog.conf#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log # 将所有auth和authpriv设施(通常与安全和认证相关的日志)的所有优先级(`*` 表示所有优先级)的消息写入 `/var/log/auth.log` 文件。用sudo执行的命令会显示在这个文件中。
*.*;auth,authpriv.none -/var/log/syslog #将除了auth和authpriv的所有优先级的消息都写入/var/log/syslog。符号-表示使用异步写入,提高性能但在系统崩溃时可能会丢失数据。
#cron.* /var/log/cron.log #注释了,所以不写入cron消息
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log #将内核(`kern` 设施)的所有消息异步写入 `/var/log/kern.log` 文件。
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log #将邮件系统(`mail` 设施)的所有消息异步写入 `/var/log/mail.log` 文件。
#user.* -/var/log/user.log#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err #将邮件系统的错误消息(`mail.err`)写入/var/log/mail.err文件。#
# Some "catch-all" log files.
#
#*.=debug;\
# auth,authpriv.none;\
# news.none;mail.none -/var/log/debug
#*.=info;*.=notice;*.=warn;\
# auth,authpriv.none;\
# cron,daemon.none;\
# mail,news.none -/var/log/messages #注释了,所以没有/var/log/messages文件生成。#
# Emergencies are sent to everybody logged in.
#
*.emerg :omusrmsg:* #将所有设施的紧急消息(`emerg` 优先级)发送给所有当前登录的用户。#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
# news.=crit;news.=err;news.=notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn /dev/tty8
注:
下面是一些常见的设施和级别的例子:
- facility:`auth`, `cron`, `daemon`, `kern`, `mail`, `syslog`, `user`, `local0` 到 `local7`(用于本地使用)等。
- 级别:`emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`。
facility被翻译为设施。它用来定义日志消息的来源,方便对日志进行分类:
# auth 用户认证
# authpriv 有特权的用户认证
# cron cron守护进程
# daemon 各种系统守护进程
# ftp ftp守护进程
# kern 内核消息
# local0-local7 保留用于本地用法
# lpr 打印机
# mail 邮件
# news 新闻
# syslog 内部syslog
# uucp uucp系统
# user 各种用户程序来的消息
3.2 /etc/rsyslog.conf
这个文件用来保存syslog时的配置参数。文件内容为:
# /etc/rsyslog.conf Configuration file for rsyslog.
#
# For more information see
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf#################
#### MODULES ####
#################module(load="imuxsock") # provides support for local system logging #加载了imuxsock模块,它允许rsyslog接收通过 Unix 域套接字发送的本地系统日志消息。
#module(load="immark") # provides --MARK-- message capability #这行注释掉了。如果不注释,表示加载immark模块# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on") #加载imklog模块,它允许rsyslog处理来自内核的日志消息。permitnonkernelfacility设置为 "on" 表示也允许记录非内核设施的消息。###########################
#### GLOBAL DIRECTIVES ####
############################
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # 使用传统的时间戳格式。# Filter duplicated messages
$RepeatedMsgReduction on #过滤重复功能。这个功能启用后,可以减少重复消息的记录。如果同一消息多次被记录,它会被合并。#
# Set the default permissions for all log files. #下面这部分是设置权限
#
$FileOwner syslog #使用的owner和group
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog #这行及后面这一行表示rsyslog在启动后出于安全考虑降低权限,切换到syslog用户和组。
$PrivDropToGroup syslog#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog #临时文件和状态文件的位置为/var/spool/rsyslog#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
-
4. 如何写入syslog
/dev/log文件是一个软链接:
user@localhost:/dev$ ll|grep log
lrwxrwxrwx 1 root root 28 Mar 2 2023 log -> /run/systemd/journal/dev-log=
用户空间只需要调用syslog()函数,即可保存log。
syslogd创建一个unitx套接字,给它捆绑在/dev/log中,监控该文件的输入。
4.1 C语言
#include <syslog.h>int main() {// 打开日志连接,指定日志程序标识和选项openlog("myapp", LOG_PID|LOG_CONS, LOG_USER);// 写入日志消息,指定优先级级别syslog(LOG_INFO | LOG_USER, "用户级别的信息性消息");syslog(LOG_ERR | LOG_AUTH, "认证系统的错误消息");// 关闭日志连接closelog();return 0;}
在这个例子中,syslog函数的第一个参数是一个位掩码,它结合了优先级级别(例如 `LOG_INFO`, `LOG_ERR`)和设施代码(例如 `LOG_USER`, `LOG_AUTH`)。这些代码定义在 `` 头文件中。
- `LOG_USER` 是一个通用的消息设施,用于用户级别的消息。
- `LOG_AUTH` 是一个专门用于安全/授权消息(例如登录事件、sudo 命令)的设施。
4.2 shell
在shell中,可以使用logger命令来写入日志。
logger -s "this is my message"
在/var/log/syslog可以看到新增的一行:
Jan 15 15:25:44 localhost user: this is my message
也可以使用-p来指定设置facility和优先级,默认是user.notice,根据50-default.conf中的这个配置*.*;auth,authpriv.none -/var/log/syslog,这条消息会写入/var/log/syslog中。
logger -p auth.info "this is a auto info test message 2"
由于使用了 -p auth.info(其中auth是设施代码,代表认证系统,而 info是消息的级别),所以这条消息被写入auth.log中。
在auth.log中显示:
Jan 15 15:34:48 localhost user: this is a auto info test message 2
4.3 内核输出
内核的打印是在/proc/kmsg文件中(dmesg命令也是读取的这个文件)。
rsyslogd通过 imklog 模块来读取内核日志缓冲区。这个模块允许 rsyslogd直接访问/proc/kmsg文件,并将其中的消息转发到 rsyslogd的处理机制中,最终根据配置将消息写入到/var/log/syslog或其他日志文件中。
-
5. syslog.1和syslog.2.gz等文件是如何生成
在/var/log目录中,可以看到,除了syslog文件,还有syslog.1, syslog.2.gz等文件,这些文件是如何生成的呢?
这些文件是由日志轮转工具/usr/sbin/logrotate生成的。
它的配置文件为:/etc/logrotate.conf和/etc/logrotate.d下的众多文件。
注意,logrotate并不仅仅可以轮转syslog日志,它是一个通用工具。/etc/logrotate.d目录下的文件有:
user@localhost:/etc/logrotate.d$ ll
-rw-r--r-- 1 root root 120 Nov 2 2017 alternatives
-rw-r--r-- 1 root root 173 Apr 20 2018 apt
-rw-r--r-- 1 root root 160 Aug 25 2020 chrony
-rw-r--r-- 1 root root 112 Nov 2 2017 dpkg
-rw-r--r-- 1 root root 94 Feb 26 2018 ppp
-rw-r--r-- 1 root root 501 Jan 14 2018 rsyslog
-rw-r--r-- 1 root root 270 Apr 5 2023 ubuntu-advantage-tools
-rw-r--r-- 1 root root 235 Feb 17 2020 unattended-upgrades
/etc/logrotate.conf文件的内容为:
# see "man logrotate" for details
# rotate log files weekly
weekly #设置日志文件每周轮换一次# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog #在执行日志轮换时使用 root 用户和 syslog 组# keep 4 weeks worth of backlogs
rotate 4 #保留 4 周的日志备份。# create new (empty) log files after rotating old ones
create #在旧日志文件轮换后创建新的空日志文件。# uncomment this if you want your log files compressed
#compress #这里注释了,所以默认不压缩# packages drop log rotation information into this directory
include /etc/logrotate.d #包含/etc/logrotate.d目录# no packages own wtmp, or btmp -- we'll rotate them here #此部分为/var/log/wtmp文件配置日志轮换。没有/etc/logrotate.d/wtmp文件,所以直接放在本文件了
/var/log/wtmp {missingok #如果文件不存在,不报错,继续下一个任务monthly #每月轮换一次create 0664 root utmp #创建新文件,权限为 0664,所有者为 root,组为 utmprotate 1 #保留 1 个旧日志文件。所以会有wtmp.1,而不会有wtmp.2
}/var/log/btmp {missingokmonthlycreate 0660 root utmprotate 1
}# system-specific logs may be configured here
/etc/logrotate.d/rsyslog文件的内容为:
/var/log/syslog
{rotate 7 #保留 7 个轮转的日志文件副本,最多会有syslog.1 ~ syslog.7文件daily #每日轮转missingoknotifempty #如果日志文件为空,不进行轮转。delaycompress #延迟压缩,即在下一次轮转时压缩上一次轮转的日志文件。所以syslog和syslog.1不压缩,syslog.2~syslog.7压缩,变为syslog.2.gz, ......, syslog.7.gzcompress #压缩轮转的日志文件postrotate #轮转后要运行的命令的开始/usr/lib/rsyslog/rsyslog-rotate #轮转后执行的具体命令endscript #标记postrotate命令块的结束
}/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{rotate 4weeklymissingoknotifemptycompressdelaycompresssharedscripts #如果有多个日志文件,只运行一次postrotate脚本,而不是每个文件都运行。postrotate/usr/lib/rsyslog/rsyslog-rotateendscript
}
由此可见,除了syslog文件每天轮转,一共保留7个旧文件(算今天的syslog,相当于保留8天的内容咯),其它都是每周轮转,保留4个旧文件。
/usr/lib/rsyslog/rsyslog-rotate的内容是
#!/bin/shif [ -d /run/systemd/system ]; then #表示用systemd来初始化系统systemctl kill -s HUP rsyslog.service #通过systemctl kill命令发送HUP信号给rsyslog.service。这个HUP信号会让rsyslog重新加载其配置文件和轮转日志,而不是完全重启服务。
elseinvoke-rc.d rsyslog rotate > /dev/null
fi
注:如果修改/etc/logrotate.d/rsyslog,对syslog增加size 500M的限制,比如:
/var/log/syslog
{
size 500M
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
这表示:每天都会检查尝试轮转,但文件大于500M才轮转,否则不轮转。
-
6. logrotate是如何被执行
/usr/sbin/logrotate工具并不是一直执行的。它是由定时计划任务cron.service的cron进程触发了才执行的。
cron的配置文件有:
user@localhost:/etc$ ll|grep cron
drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.d/
drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.daily/
drwxr-xr-x 2 root root 4096 Nov 21 08:20 cron.hourly/
drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.monthly/
drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.weekly/
-rw-r--r-- 1 root root 722 Nov 16 2017 crontab
cron是定时计划任务,可以在各个目录中定义自己的脚本,在时间到来时,cron就会自动执行这些脚本。比如cron.daily目录下有:
user@localhost:/etc/cron.daily$ ll
-rw-r--r-- 1 root root 102 Nov 16 2017 .placeholder
-rwxr-xr-x 1 root root 1478 Apr 20 2018 apt-compat*
-rwxr-xr-x 1 root root 1176 Nov 2 2017 dpkg*
-rwxr-xr-x 1 root root 2211 Apr 13 2014 locate*
-rwxr-xr-x 1 root root 372 Aug 21 2017 logrotate*
-rwxr-xr-x 1 root root 249 Jan 25 2018 passwd*
logrotate就是其中的一个文件。其内容为:
#!/bin/sh# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do[ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean statustest -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf #这里调用了logrotate程序
那么,cron是如何实现每天调用cron.daily里的脚本呢?
可以看到同目录下的crontab文件。这个文件是cron程序的配置文件的入口。/etc/crontab的文件内容为:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
其中,第11行表示每小时的第 17 分钟,以 `root` 用户身份执行。`cd /` 是切换到根目录,`run-parts --report /etc/cron.hourly` 是运行`/etc/cron.hourly` 目录下的所有脚本,`--report` 选项会报告哪些作业被执行了。
第12行表示每天早上 6:25,以 `root` 用户身份执行。首先检查 `anacron` 是否存在并可执行,如果不存在或不可执行,则执行括号中的命令,运行 `/etc/cron.daily` 目录下的所有脚本。这就是为什么我们前面看到syslog.1和syslog.2.gz文件的生成时间都是06:25 。
第13行表示每周星期天(7)早上 6:47,以 `root` 用户身份执行。同样,先检查 `anacron`,然后可能运行 `/etc/cron.weekly` 目录下的脚本。
第14行表示 每月第一天早上 6:52,以 `root` 用户身份执行。检查 `anacron`,然后可能运行 `/etc/cron.monthly` 目录下的脚本。
要注意的是,logrotate只是在/etc/cron.daily中调用,而没有在cron.weekly中定义。在我们前面的rsylog的配置中,除了syslog的日志是每天轮转之外,其它的比如kern.log日志是每周轮转的呢?
`logrotate` 的配置确实是通过 `cron.daily` 来调用的,这意味着 `logrotate` 每天都会运行一次。尽管如此,`logrotate` 仍然能够处理 `weekly`、`monthly` 甚至 `yearly` 的轮转周期,因为它会跟踪上次轮转每个日志文件的时间。当 `logrotate` 运行时,它会查看每个日志文件的状态信息,这些信息通常存储在 `/var/lib/logrotate/status` 或 `/var/lib/logrotate/logrotate.status` 文件中。这个状态文件记录了每个日志文件最后一次轮转的时间。`logrotate` 使用这些信息来确定是否到了轮转每个日志文件的时间。
这是 `logrotate` 能够处理不同轮转周期的关键。即使它每天都运行,它也会检查每个文件的配置和上次轮转的时间,以决定是否执行轮转。如果配置为 `weekly`,并且上次轮转是一周前,那么 `logrotate` 将进行轮转。同样,如果配置为 `monthly` 并且上次轮转是一个月前,那么它也会进行轮转。
因此,`logrotate` 不需要在 `cron.weekly` 或 `cron.monthly` 目录中有单独的条目,因为其自身的检查机制足以确保在正确的时间执行轮转。这种设计使得管理和维护 `logrotate` 变得更加简单,因为您只需要保证它每天至少运行一次,而不需要为不同的轮转周期设置多个 `cron` 任务。
-
7. 如何限制syslog的大小为500M以内
有时候比如kernel有问题,疯狂打印。造成kern.log和syslog文件都很快就把磁盘占满了,系统没有办法正常工作。
这时候我们想限制syslog大小为500M以内,怎么办呢?
方法一:由rsyslogd进程自己来限制syslog和kern.log的大小
(1) . 修改/etc/rsyslog.d/50-default.conf文件
文件中添加:
$outchannel log_syslog,/var/log/syslog,524288000,/home/me/rsyslog/logrotate_syslog.sh $outchannel log_kern,/var/log/kern.log,524288000,/home/me/rsyslog/logrotate_ kernlog.sh
把
*.*;auth,authpriv.none -/var/log/syslog
kern.* -/var/log/kern.log
修改为
*.*;auth,authpriv.none :omfile:$log_syslog
kern.* :omfile:$log_kern
(2). 在/home/me/中增加rsyslog目录,增加脚本logrotate_syslog.sh和logrotate_kernlog.sh
mkdir rsyslog
cd rsyslog
sudo touch logrotate_syslog.sh logrotate_kernlog.sh
sudo chown syslog:adm logrotate_syslog.sh logrotate_kernlog.sh
sudo chmod 755 logrotate_syslog.sh logrotate_kernlog.sh
logrotate_syslog.sh文件内容为:
#!/bin/bash mv /var/log/syslog /var/log/syslog.33 truncate -s 0 /var/log/syslog chown syslog:adm /var/log/syslog
logrotate_kernlog.sh文件的内容为:
#!/bin/bash mv /var/log/kern.log /var/log/kern.log.33 truncate -s 0 /var/log/kern.log chown syslog:adm /var/log/kern.log
方法二:每小时进行日志轮转
把syslog的日志轮转从/etc/cron.daily/移到/etc/cron.hourly/,使得它变为每小时进行日志轮转。
/etc/cron.daily/logrotate中有这一行:
/usr/sbin/logrotate /etc/logrotate.conf
把它移动到/etc/cron. hourly/logrotate文件中。但是其实这影响了包括rsyslog在内的所有的日志的轮转。
当然有可能每小时进行日志轮转还是不够。需要进行每分钟日志轮转。
方法三:每分钟进行日志轮转
(1). 在/etc/logrotate.d/目录下创建一个名为 mylogs的配置文件:
/var/log/syslog
/var/log/kern.log
{
size 500M
rotate 5
missingok
notifempty
compress
delaycompress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
}
(2). 执行sudo crontab -e
在出现的编辑界面中添加一行* * * * * /usr/sbin/logrotate /etc/logrotate.d/mylogs
这一行内容会放在/var/spool/cron/crontabs/root文件中。
-
8. 与syslog有关的三个程序
程序名称 | service | 作用 | 配置文件 | 输出文件 |
rsyslogd | rsyslog.service | 写入/var/log目录下的部分文件(具体见右侧) | /etc/rsyslog.d/50-default.conf、 /etc/rsyslog.conf、 etc/syslog.conf应该是多余的,是旧的syslog.service的配置。 | /var/log目录下的 auth.log syslog cron.log kern.log 等 |
logrotate | 默认不启动。 由cron周期调用。 比如syslog的日志轮转是在/etc/cron.daily/里执行,表明syslog的日志轮转的最小周期是1天。 | 日志轮转备份。 包括rsyslog、apache2、apt等服务或者进程等产生的日志。 | /etc/logrotate.conf、 /etc/logrotate.d/rsyslog /etc/logrotate.d/apt等 | /var/log/目录下的 syslog.1 syslog.2.gz apt/term.log |
cron | cron.service | 执行定时计划任务,包括logrotate,也可以自己添加 | /etc/crontab /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.monthly/ /etc/cron.weekly/ 这些文件中,默认最小的时间间隔是hourly。 如果需要minutely,需要使用crontab -e编辑新的配置文件。 |