apt-get install inetutils-syslogd
2、重启syslog、(syslog日志文件写满后会停止记录日志)sudo killall -HUP syslogd
3、循环记录日志需安装logrotate(用于控制日志的循环记录)和cron(定时调用logrotate)在Debian或Ubuntu上:
sudo apt-get install logrotate cron
在Fedora,CentOS或RHEL上:yum install logrotate crontabs
4、cron会根据/etc/crontab配置定时执行命令
cron默认配置如下:
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 )
minute — 分钟,从 0 到 59 之间的任何整数hour — 小时,从 0 到 23 之间的任何整数
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
command — 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。
整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。
用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。
正斜线(/)可以用来指定间隔频率。在范围后加上 /<integer> 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。
17 * * * * //每小时的第17分钟执行一次 cron.hourly 目录下的命令
25 6 * * * //每天的6点25执行一次 cron.daily 目录下的命令
47 6 * * 7 //每个星期天的6点47执行一次 cron.weekly 目录下的命令
52 6 1 * * //每月的1号6点52执行一次 cron.monthly 目录下的命令
5、logrotate中最小轮转周期为小时,不能配置为分钟,要配置为分钟可以使用如下方式:(logrotate中size配置未生效没弄懂)
6、在/etc/crontab文件中添加一个每10分钟执行一次 cron.minutely 目录下的命令
*/10 * * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.minutely )
7、创建目录cron.minutely
sudo mkdir /etc/cron.minutely
8、拷贝/etc/cron.daily/logrotate到/etc/cron.minutely/目录下
sudo cp /etc/cron.daily/logrotate /etc/cron.minutely/
9、编辑/etc/cron.minutely/logrotate文件添加命令
手动执行日志备份命令
/usr/sbin/logrotate -vf /etc/logrotate.d/inetutils-syslogd
使用‘-d’选项以预演方式运行logrotate
logrotate -d /etc/logrotate.d/log-file
使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。
logrotate -vf /etc/logrotate.d/log-file
删除压缩的历史日志
rm /var/log/*.gz
10、编辑/etc/logrotate.d/inetutils-syslogd配置文件
/var/log/auth.log {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/daemon.log {
rotate 7
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/debug {
size 20M
rotate 1
hourly
missingok
notifempty
compress
delaycompress
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}
/var/log/kern.log {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/lpr.log {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/mail.err {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/mail.info {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/mail.log {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/mail.warn {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/messages {
size 20M
rotate 1
hourly
missingok
notifempty
compress
delaycompress
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}
/var/log/ppp.log {
rotate 4
weekly
missingok
notifempty
compress
delaycompress
}
/var/log/user.log {
size 20M
rotate 1
hourly
missingok
notifempty
compress
delaycompress
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}
/var/log/uucp.log {
rotate 4
missingok
notifempty
weekly
compress
delaycompress
}
/var/log/syslog {
size 20M
rotate 1
hourly
compress
delaycompress
postrotate
/etc/init.d/inetutils-syslogd reload >/dev/null
endscript
}
日志样例
# touch /var/log/log-file
# vim /etc/logrotate.d/log-file
/var/log/log-file {
size=50M >> 日志文件大小可以增长到50MB
dateext >> 让旧日志文件以创建日期命名,这可以通过添加dateext常熟实现。
monthly >> monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’、‘hourly’或者‘yearly’。
rotate 5 >> rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
compress >> compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
delaycompress >> delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok >> missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty >> notifempty: 如果日志文件为空,轮循不会进行。
create 644 root root >> create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate >> postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
/usr/bin/killall -HUP rsyslogd
endscript
}