Upstart 日志未旋转

Upstart 日志未旋转

我有一个自定义 upstart 脚本,用于管理 Node API 服务。该脚本将输出传输到/var/log/upstart/api-access.log。我一直看到的是旧日志被存档到,但没有创建api-access.log.1.gz新文件。api-access.log

知道为什么会发生这种情况或我该怎么做才能解决它吗?

我的 upstart 文件的脚本部分如下所示:

script
  chdir /opt/www/api
  exec sudo -u www-data NODE_ENV=production npm start >> /var/log/upstart/api-access.log
end script

答案1

当 /var/log/upstart/api-access.log 被归档时,指向它的原始文件系统链接将被删除,但是 inode 仍然保留,因为它由执行的进程持有。即使没有对该 inode 的引用,该进程仍会继续写入该 inode,并且会继续这样做,直到重新启动该进程。

除非有特殊原因需要将输出重定向到该文件,否则应避免这样做。Upstart 会将所有输出写入 /var/log/upstart 中以 upstart 脚本命名的文件中。它还会在每次写入时重新打开该文件,因此如果该文件已被日志轮换删除,则会重新创建该文件。

JennyD 编辑: 如果您确实想写入文件,请将日志轮换脚本设置为复制和截断,而不是移动文件。这样,原始文件句柄将保持可用,但内容将移动到存档文件。

相关内容