使用systemd分离java stdout和stderr并且不填写日志

Gio*_*Mac 5 logging syslog systemd journald

我正在通过 systemd 运行 Java 应用程序:

[Unit]
Description=test service

[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/testserver
WorkingDirectory=/opt/testserver
ExecStart=/usr/bin/java -jar /opt/testserver/test.jar
StandardOutput=syslog
StandardError=syslog
User=testserver
Group=testserver
SyslogIdentifier=testserver

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我想stdout/opt/testserver/stdout.logstderr/opt/testserver/stderr.log-任何工作地点都可以接受(即,如果可以做到通过syslog)。如果可能,我想避免在日志日志中至少记录其中之一。

谢谢...

Ste*_*let 1

我正在尝试使用以下 Logstash 来替换其 init.d 脚本。基本上,用 bash 包装它以提供 stdout 和 stderr 重定向。不确定这是否正是您想要的,或者想要使用(它不是太可怕,但显然不是 systemd 希望您这样做的方式),但我需要一些东西让它在 Elasticsearch 之后启动,但我不想我的团队注意到日志文件最终位置的任何不同之处,所以希望这能让我渡过难关,直到他们提供自己的文件之一

[Unit]
Description=Logstash
After=elasticsearch.service
Requires=elasticsearch.service

[Service]
Type=simple
User=logstash
Group=logstash
ExecStart=/bin/bash -c 'exec /opt/logstash/bin/logstash agent \
    -f /etc/logstash/conf.d \
    -l /var/log/logstash/logstash.log \
    >/var/log/logstash/logstash.stdout \
    2>/var/log/logstash/logstash.err'
WorkingDirectory=/var/lib/logstash
LimitNICE=19
LimitNOFILE=16384
Restart=always

[Install]
WantedBy=multi-user.target 
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚意识到我可以/etc/systemd/system/logstash.service.d/after-es.conf按如下方式创建,而不必重写他们的 init.d 脚本:

[Unit]
After=elasticsearch.service
Requires=elasticsearch.service
Run Code Online (Sandbox Code Playgroud)

哦,好吧,留下上面的内容以防万一有用。