日志轮换后,syslog停止记录日志

4
每次 newsyslog 旋转日志文件后,syslog 就停止往文件中记录日志。必须重新启动 syslogd 才能继续记录日志。
(myserver:wheel)# logger -p local1.info -t myprocess "hello thiru"; ll myfile.log; cat myfile.log
-rw-r--r--  1 root  wheel     0B Nov 10 11:26 myfile.log

(myserver:wheel)# /etc/rc.d/syslogd restart
Stopping syslogd.
Starting syslogd.

(myserver:wheel)# logger -p local1.info -t myprocess "hello thiru"; ll myfile.log; cat myfile.log
-rw-r--r--  1 root  wheel    44B Nov 10 12:04 myfile.log
Nov 10 12:04:31 myserver myprocess: hello thiru 
(myserver:wheel)#

在使用 logrotateLinux 上,我们可以通过在 logrotate 配置文件的 postrotate 部分执行 syslog/rsyslog restart 来解决这个问题。
newsyslog 中是否有类似于 postrotate 的功能呢? 编辑: Syslog 和 newsyslog 配置文件:
(TPC-E11-36:wheel)# cat /etc/newsyslog.d/newsyslog-myprocess.conf
/var/log/myfile.log 644 20 10000 * Z

(TPC-E11-36:wheel)# cat /etc/syslog.d/syslog-myprocess.conf
!myprocess
local1.info /var/log/myfile.log
(TPC-E11-36:wheel)#

2
请参阅 man newsyslog.conf,但默认情况下,除非指定了“N”标志或者另一个进程,否则当日志文件轮换时,syslogd 将会接收到一个信号。请检查您的 newsyslog.confnewsyslog.conf.d/* 文件。 - Richard Smith
@RichardSmith 我不知道如何在 newsyslog.conf 中指定一个进程?我也没有使用过 N 标志。 - Thirupathi Thangavel
1
我无法复制这个问题。如果我将您的行添加到我的 /etc/syslog.conf 中并调用 newsyslog -f newsyslog-cnd.conf,则日志文件将被旋转,新文件将创建并显示消息“由于大小而翻转日志文件”,并且 logger 可以正常工作。我不认识您提到的子目录 newsyslog.dsyslog.d,并且在日志轮换后我没有得到一个 0B 的文件。 - Richard Smith
@RichardSmith 我现在也无法复制它 :( 这可能是因为夏令时改变导致的吗?请忽略子目录。我的syslog.conf和newsyslog.conf已经包含了它们。 - Thirupathi Thangavel
2个回答

1

1

实际上,newsyslog 中有类似于 postrotate 的功能,即配置文件中的R标志与 path_to_pid_cmd_file(这是在 FreeBSD 手册 newslog.conf(5) 中的称呼)相结合。设置了此标志后,提供的路径将不会被解释为 PID 文件的路径,而是将被解释为脚本的路径(例如 shell 脚本),该脚本将在日志轮换完成后执行。

您甚至可以向脚本传递参数,但是需要使用 IFS 变量(用空格分隔,否则参数会被解释为信号并可能导致错误)。

# logfilename       [owner:group] mode count size  when  flags [/cmd_file]
/var/log/myfile.log root:wheel    644  20    10000 *     ZR    /path/to/my/script${IFS}myargument

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接