我正在通过 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.log
并stderr
进入/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
哦,好吧,保留上面的内容以防有用。