Разделение 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

О, хорошо, оставляя вышеупомянутое в случае, если это полезно.

Другие вопросы по тегам