我在 Debian 上用 C 编写了一个小型服务。
此服务会自动从 Linux 启动,并按预期执行一些文件操作和其他操作。
该服务会将一些信息消息以及错误情况打印到标准输出。当我从控制台(而不是作为服务)运行二进制文件时,这些内容会在控制台窗口中显示出来。
到目前为止我唯一未能完成的事情就是当二进制文件作为服务运行时将其输出写入日志。
我查看了所有找到的搜索结果,以 root 身份查询日志,看到启动/停止服务的系统消息,但服务二进制文件没有打印任何内容。
我只是用printf("hey this should appear in the journal");
- 打印,但日志中什么都看不到。
根据各处的解释,服务的所有输出都应自动定向到日志,对吗?
我可能遗漏了什么,以免发生这种情况?
编辑
我发现了用于日志记录的特殊函数,但实际上我喜欢在控制台或日志中自动获取标准输出的想法,这取决于我如何运行二进制文件。
我尝试了一个 bash 脚本服务,发现它可以echo
按预期将消息写入日志。
使用 systemd 运行时,单元的标准输出将转到单元
StandardOutput=
配置设置指定的任何内容。默认为系统配置的DefaultStandardOutput=
值,默认为journal
。因此,如果您的系统使用默认设置,则单元的标准输出应转到日志。对于任何给定的单位,您可以通过运行来检查该设置
(
yourunit
酌情替换)。需要检查的一件事是您的程序是否正在刷新其输出:使用
printf
,您需要包含换行符(\n
)或明确调用fflush
。作为一般规则,日志消息应使用 来编写
syslog
,而不是发送到标准输出;有关详细信息,请参阅编写将消息注入 /var/log/messages 的 C 代码的正确方法?