我试图将systemd服务的输出重定向到一个文件,但似乎不起作用:

[Unit]
Description=customprocess
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/binary1 agent -config-dir /etc/sample.d/server
StandardOutput=/var/log1.log
StandardError=/var/log2.log
Restart=always

[Install]
WantedBy=multi-user.target

请纠正我的做法.

推荐答案

我认为有一种更优雅的方法可以解决这个问题:使用标识符将stdout/stderr发送到syslog,并指示syslog管理器按程序名拆分其输出.

在systemd服务单元文件中使用以下属性:

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote

然后,假设您的发行版使用rsyslog管理系统日志(log),在/etc/rsyslog.d/<new_file>.conf中创建一个包含以下内容的文件:

if $programname == '<your program identifier>' then /path/to/log/file.log
& stop

现在,让日志(log)文件可由syslog写入:

# ls -alth /var/log/syslog 
-rw-r----- 1 syslog adm 439K Mar  5 19:35 /var/log/syslog
# chown syslog:adm /path/to/log/file.log

重新启动rsyslog(sudo systemctl restart rsyslog)并尽情享受吧!您的程序stdout/stderr仍将通过journalctl(sudo journalctl -u <your program identifier>)提供,但它们也将在您 Select 的文件中提供.

Source via archive.org

Linux相关问答推荐

Azure Linux B1s VM-Jenkins Sever已安装,但主页未打开

如果在两种模式之间找到文本,则使用sed删除它们之间的所有行

Linux 上 Ada 任务优先级的语义是什么?

使用ansible配置Linux VM使用vmware_vm_shell模块时变成su?

如何更改文件的上次访问/修改/更改日期?

Linux上Kvaser数据库编辑器的等效工具

如何在 Linux 上使用 Python 判断进程是否仍在运行?

内核是如何工作的?

每次来宾重新启动后 Vagrant 执行脚本或命令(vagrant up)

关于 putenv() 和 setenv() 的问题

如何在非阻塞套接字上处理 OpenSSL SSL_ERROR_WANT_READ / WANT_WRITE

你如何在 C 中的 Linux 上进行非阻塞控制台 I/O?

从Linux中的行尾删除空格

一个进程如何拦截Linux上另一个进程的stdout和stderr?

用于 ssh 的类似 teamviewer 的工具?

如何在 shell 脚本中向文件中添加一行?

限制程序在 Linux 中运行的时间

在 PHP / Apache / Linux 环境中,为什么 chmod 777 是危险的?

如何通过命令行识别特定的 Linux 风格?

Linux cmd 在 jar 中搜索类文件,而不考虑 jar 路径