У меня был демон, которому нужен был собственный каталог в /var/run
для своего PID-файла с разрешением на запись, предоставленным пользователю демона.
Я обнаружил, что могу создать этот каталог с помощью следующих команд:
# mkdir /var/run/mydaemon
Затем я мог бы изменить его владельца на пользователя / группу, под которой я хотел запустить процесс:
# chown myuser:myuser /var/run/mydaemon
Но этот каталог УДАЛЕТСЯ всякий раз, когда я выполняю перезагрузку! Как мне заставить этот каталог создаваться каждый раз при загрузке машины?
Есть две альтернативы, чтобы systemd создавал каталоги в /var/run
/ /run
.
Обычно проще всего объявить RuntimeDirectory
в модульном файле вашей службы. Пример:
RuntimeDirectory=foo
Это создаст /var/run/foo
для системного блока. (Примечание: НЕ указывайте полный путь, только путь под /var/run
) Полный текст документов см. соответствующая запись в документации systemd.exec.
Для каталогов среды выполнения, требующих более сложной или иной конфигурации или гарантий срока службы, используйте tmpfiles.d
и пусть ваш пакет сбросит файл /usr/lib/tmpfiles.d/mydaemon.conf
:
#Type Path Mode UID GID Age Argument d /run/mydaemon 0755 myuser myuser - -
Я создал службу, которая при запуске создавала бы каталог:
vim /etc/systemd/system/mydaemon-helper.service
Содержание /etc/systemd/system/mydaemon-helper.service
:
[Unit]
Description=MyDaemon Helper Simple Service
After=network.target
[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort
[Install]
WantedBy=multi-user.target
Потом я запустил эту службу:
systemctl start mydaemon-helper
systemctl status mydaemon-helper
Вывод:
[root@alpha etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
Active: inactive (dead)
May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.
Наконец, я сказал системе загружать его при запуске:
systemctl enable mydaemon-helper