我有一项特殊的服务,它记录罕见但重要的信息。我几个月前就设置好了,今天我运行journalctl -n 50 --unit=my-service
却发现没有条目。
我对大多数单位的这种行为非常满意 - 我要么需要立即发生的事情(或者最多几天前),并且我不关心几个月前的记录。
然而,有没有办法告诉journald
我们对单个特定单元的记录有独立的存储和保留策略?我想保留这些特定的日志,比如说 5 年——无论它需要多大。其他单元的日志应该不受此影响,并保留其现有行为。
我有点失去了理解journald.conf(5)
,根本无法弄清楚何时可以进行每单元配置。如果是的话 - 希望有一个简短的具体示例 - 我应该编辑/创建哪个文件以及我应该写什么。或者,如果你确定这肯定不可行——那也是一个很好的答案。
笔记:我的具体案例涉及 Arch Linux 主机,但我想这应该没什么关系。
答案1
看来我很可能在日记方面运气不好。除非我找到一种方法来生成独立的“长期存储”日志(就像目前有不同的每用户日志),但我不确定这是一种可行且明智的方法。我想,设置 syslogd (和 logrotate)会更容易。
特点2014年底没有出现,正如伦纳特本人所证实的那样。
而且似乎还没有到来。至少,“日志:旋转/清理时允许每个优先级和每个服务的保留时间”行仍在 TODO 文件中(链接至2016年7月11日修订版)。
答案2
生成日志文件非常简单。默认情况下,所有记录到日志的日志也会发送到系统日志,并且需要设置此默认值。 rsyslog.conf 控制如何处理传递到 syslog 的条目。此外,SyslogFacility
默认情况下daemon
,任何服务的日志条目通常都会出现daemon.log
在/var/log
.
在您的服务文件中添加到 [service] 部分
SyslogFacility=local2
(数字可以在 0 到 7 之间)https://www.freedesktop.org/software/systemd/man/systemd.exec.html
修改 /etc/rsyslog.conf (找到要修改的现有行),以便将 local2 记录到特定文件(第一行),并且最好不要通过添加local2.none
(它已经在日志中)来记录到 syslog。
local2.* /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none -/var/log/syslog
[编辑]你还需要修改全部内容
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none,local2.none -/var/log/messages
当然,实际的保留需要通过 logrotate 来完成。
华泰