С конфигурацией по умолчанию в Debian непривилегированный пользователь не будет иметь доступа ни к журналам systemd-journald, ни к журналам syslog. Если вы вошли в систему как обычный пользователь, вы получите этот ответ от journalctl:
$ journalctl
No journal files were found.
, что немного сбивает с толку.
Если вы вошли в систему как root, journalctl --unit=yourservice
должен предоставить вам информацию, которую вы ищете. После systemctl перезапуска bind9
на моем сервере я получаю это после journalctl --unit=bind9
:
Jun 03 18:20:24 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:20:24 ns named[27605]: received control channel command 'stop'
Jun 03 18:20:24 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:20:24 ns systemd[1]: Started BIND Domain Name Server.
Если я убью bind9 явно с помощью kill -9
, journalctl --unit=bind9
дает:
Jun 03 18:46:25 ns systemd[1]: bind9.service: main process exited, code=killed, status=9/KILL
Jun 03 18:46:25 ns rndc[28028]: rndc: connect failed: 127.0.0.1#953: connection refused
Jun 03 18:46:25 ns systemd[1]: bind9.service: control process exited, code=exited status=1
Jun 03 18:46:25 ns systemd[1]: Unit bind9.service entered failed state.
Jun 03 18:46:25 ns systemd[1]: bind9.service holdoff time over, scheduling restart.
Jun 03 18:46:25 ns systemd[1]: Stopping BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Starting BIND Domain Name Server...
Jun 03 18:46:25 ns systemd[1]: Started BIND Domain Name Server.
Первая строка указывает, что процесс умер, потому что он был убит.
systemd-journald также пересылает все сообщения журнала в syslog, поэтому вы также должны найти эти сообщения в /var/log/syslog
.
Systemd и systemd-journald имеют конфигурацию по умолчанию, скомпилированную в конфигурации, которую можно изменить в /etc/systemd/system.conf
и /etc/systemd/journald.conf
.
Может быть полезно знать, что по умолчанию systemd-journald хранит журналы в папке /run
, то есть tmpfs
, и поэтому исчезает после перезагрузки. Это означает, что для того, чтобы получить сообщения журнала старше последней загрузки, вам придется просмотреть файлы системного журнала. В этом случае journalctl не будет давать вам журналы старше последней загрузки. Это можно изменить в /etc/systemd/journald.conf
, установив Storage=persistent
.
Страницы руководства, которые документируют это:
man 8 systemd-journald
man 5 journald.conf
man 5 systemd-system.conf
man 5 systemd-user.conf
Также обратите внимание, что для автоматического перезапуска службы systemd это должно быть настроено в его файле .service
. От man 5 systemd.service
:
Restart=
Configures whether the service shall be
restarted when the service process exits, is
killed, or a timeout is reached. The service
process may be the main service process, but it
may also be one of the processes specified with
ExecStartPre=, ExecStartPost=, ExecStop=,
ExecStopPost=, or ExecReload=. When the death
of the process is a result of systemd operation
(e.g. service stop or restart), the service
will not be restarted. Timeouts include missing
the watchdog "keep-alive ping" deadline and a
service start, reload, and stop operation
timeouts.
Takes one of no, on-success, on-failure,
on-abnormal, on-watchdog, on-abort, or always.
If set to no (the default), the service will
not be restarted.