Назад | Перейти на главную страницу

Создайте каталог в / var / run при загрузке

У меня был демон, которому нужен был собственный каталог в /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   -   -

Видеть полная документация tmpfiles.d здесь.

Я создал службу, которая при запуске создавала бы каталог:

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