用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 

我想在/opt/testserver/stdout.log/opt/testserver/stderr.log stdout – 任何工作选项是可以接受的(即如果可能通过syslog )。 如果可能的话,我想避免在日志logging中至lesslogging其中之一。

谢谢…

我正在尝试以下Logstash来replace它的init.d脚本。 基本上,用bash包装它来提供stdout和stderrredirect。 不知道这是不是你想要的,或者想要使用的(这不是太可怕,但显然不是系统要求你这样做),但我需要一些东西,让它在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 

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

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

噢,离开上面的情况下,它是有用的。