Some commands systemd init.
systemctl list-units
systemctl --failed
systemctl list-units --type=service
systemctl list-unit-files
systemctl list-unit-files --state=enabled
journalctl -n 100
journalctl -f
journalctl --since="2017-03-30 6:20"
journalctl -u zabbix-agent --since="2017-03-30 6:20"
Проверить, включен ли юнит в автозапуск при загрузке системы:
$ systemctl is-enabled юнит
Включить юнит в автозапуск при загрузке системы:
# systemctl enable юнит
Убрать юнит из автозапуска при загрузке системы:
# systemctl disable юнит
Маскировать юнит, чтобы сделать невозможным его запуск:
# systemctl mask юнит
Снять маску юнита:
# systemctl unmask юнит
Релоад-демонов:
# systemctl daemon-reload
[Unit]
Description=BIND Domain Name Server
Documentation=man:named(8)
After=network.target
[Service]
ExecStart=/usr/sbin/named -f -u bind -4
ExecReload=/usr/sbin/rndc reload
ExecStop=/usr/sbin/rndc stop
[Install]
WantedBy=multi-user.target
Типы служб
Существует несколько различных типов запуска служб, которые надо иметь в виду при написании пользовательского файла службы. Тип определяется параметром Type= в секции [Service]:
Type=simple
(по умолчанию): systemd предполагает, что служба будет запущена незамедлительно. Процесс при этом не должен разветвляться. Не используйте этот тип, если другие службы зависят от очередности при запуске данной службы. Исключение – активация сокета
Type=forking:
systemd предполагает, что служба запускается однократно и процесс разветвляется с завершением родительского процесса. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить PIDFile=
, чтобы systemd могла отслеживать основной процесс
Type=oneshot:
полезен для скриптов, которые выполняют одно задание и завершаются. Вам может понадобиться также установить параметр RemainAfterExit=yes
, чтобы systemd по-прежнему считала процесс активным, даже после его завершения
Type=notify:
идентичен параметру Type=simple, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления представлена в libsystemd-daemon.so
Type=dbus:
сервис считается находящимся в состоянии готовности, когда определенное BusName появляется в системной шине DBus
Type=idle:
systemd will delay execution of the service binary until all jobs are dispatched. Кроме того, поведение очень похоже на Type=simple.
Есть два способа редактирования файлов юнита, предоставленного пакетом: заменить весь блок файла на новый или создать фрагмент кода, который применяется в верхней части существующего блока файла. В обоих методах, чтобы применить изменения, нужно перезагрузить юнит. Это может быть сделано либо путем редактирования блока с помощью systemctl edit
(которая автоматически загружает модуль) либо при перезагрузке всех юнитов:
# systemctl daemon-reload
Обработка зависимостей
В случае использования systemd зависимости могут быть указаны правильным построением файлов юнитов. Наиболее частый случай — юниту A требуется, чтобы юнит B был запущен перед тем, как запустится сам юнит A. В этом случае добавьте строки Requires=B и After=B в секцию [Unit] файла службы A. Если подобная зависимость не является обязательной, взамен указанных выше добавьте, соответственно, строки Wants=B и After=B. Обратите внимание, что Wants= и Requires= не подразумевают After=, что означает, что если After= не определено, два юнита будут запущены параллельно друг другу.
Обычно зависимости указываются в файлах служб, а не в целевых юнитах. Например, network.target потребуется любой службе, которая связана с настройкой ваших сетевых интерфейсов, поэтому в любом случае определите загрузку вашего пользовательского юнита после запуска network.target.
Примеры
Например, если вы просто хотите добавить дополнительную зависимость к юниту, можно создать следующий файл:
/etc/systemd/system/unit.d/customdependency.conf
[Unit]
Requires=new dependency
After=new dependency
В качестве другого примера, для того чтобы заменить направление для юнита ExecStart, что не относится к типу oneshot, создайте следующий файл:
/etc/systemd/system/unit.d/customexec.conf
[Service]
ExecStart=
ExecStart=новая комманда
Обратите внимание ExecStart должна быть очищена, перед новым назначением ([1]).
Еще один пример, чтобы автоматически перезапустить службу:
/etc/systemd/system/unit.d/restart.conf
[Service]
Restart=always
RestartSec=30