Разделение Java-stdout и stderr с помощью systemd и без заполнения журнала
Я запускаю Java-приложения через systemd:
[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
). Если возможно, я хочу избежать регистрации хотя бы одного из них в журнале журнала.
Спасибо...
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
О, хорошо, оставляя вышеупомянутое в случае, если это полезно.