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

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

我正在通过 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

我想stdout进入/opt/testserver/stdout.logstderr进入/opt/testserver/stderr.log- 任何工作选项都是可以接受的(即如果可能的话可以通过syslog)。如果可能的话,我想避免在 journald 日志中记录其中至少一个。

谢谢...

答案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 

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

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

哦,好吧,保留上面的内容以防有用。

相关内容