我有一个脚本,打算作为 systemd 服务运行。
我知道 stdout 和 stderr 将被路由到 systemd 日志。有什么方法可以让我指示将一行输出视为 INFO 或 ERROR 或任何适当的内容?
答案1
从systemd for Developers III:systemd 的复仇我们发现:
本示例中的打印字符串以默认日志优先级 LOG_INFO 进行记录1。有时更改此类打印字符串的日志优先级很有用。当 systemd 解析服务的 STDOUT/STDERR 时,它将查找每行开头的 < > 中包含的优先级值
神奇的数字显然是从syslog(3)
所以复制的
$ egrep 'INFO|ERR' /usr/include/sys/syslog.h | fgrep define
#define LOG_ERR 3 /* error conditions */
#define LOG_INFO 6 /* informational */
#define LOG_PERROR 0x20 /* log to stderr as well */
从 TCL 脚本等发出信息或错误消息看起来像
#!/usr/bin/env expect
puts "<3>auuugh"
puts "<6>infos"