Створіть каталог під / var / run при завантаженні


39

У мене був демон, якому потрібен власний dir /var/runдля його PID-файлу з дозволом на запис, наданим користувачу демона.

Я виявив, що можу створити цей директор з цими командами:

# mkdir /var/run/mydaemon

Тоді я міг змінити право власності на користувача / групу, під якою я хотів запустити процес:

# chown myuser:myuser /var/run/mydaemon

Але цей dir буде GONE кожного разу, коли я випускаю перезавантаження! Як змусити цей директор створювати кожен раз, коли машина завантажується?

Відповіді:


56

Дві альтернативи системному створенню каталогів, як правило, найпростішим є оголошення RuntimeDirectoryв файлі одиниць вашої послуги:

RuntimeDirectory=, RuntimeDirectoryMode= Бере список імен каталогів. Якщо встановлено, один або більше каталогів із вказаними іменами будуть створені нижче /run(для системних служб) або нижче $ XDG_RUNTIME_DIR (для служб користувачів) при запуску пристрою та видалені при зупинці блоку. Каталоги матимуть режим доступу, зазначений у RuntimeDirectoryMode=, та належать користувачеві та групі, зазначеним у User=та Group=. Використовуйте це, щоб керувати одним або декількома каталогами виконання цього пристрою та прив'язувати їхнє життя до демонстраційного часу виконання. Вказані назви каталогів повинні бути відносними та не можуть містити "/", тобто потрібно звертатися до простих каталогів для створення або видалення. Це особливо корисно для непривілейованих демонів, які не можуть створити каталоги виконання або не працювати через відсутність привілеїв, а також переконатися, що каталог виконання автоматично очищається після використання.

Або для каталогів виконання, які потребують більш складної або іншої конфігурації або гарантій довічного використання, використовуйте tmpfiles.dпакет, який пакує ваш файл /usr/lib/tmpfiles.d/mydaemon.conf:

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -

Я використовував останнє, тому що фактичний демон використовує systemd-sysv-generatorі у мене було достатньо кривих навчання за тиждень. Просто той файл .conf і цей рядок. Відчуваю себе добре зараз B-)
користувач24601

Я вже останній визначається на мою /usr/lib/tmpfiles.d/php7.3-fpm.confі /usr/lib/tmpfiles.d/php7.2-fpm.confі по- , як і раніше не створює /run/phpкаталог.
MarthyM

3

Я створив службу, яка зробила б реж на початку:

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


Гаразд, я думаю, я мав би це поставити у своєму питанні, враховуючи, що я такий ноб. Я навчаюсь, хоча - спасибі вам, хлопці!
user24601

2
Ні, створення відповіді було правильним ділом, тому люди можуть коментувати це, а також, щоб це не захаращувало ваше питання. Відповідаючи на власні запитання, явно рекомендується. І ваша відповідь також не є помилковою, просто існують набагато кращі способи зробити це, так що ІМО вам не слід було б скасовувати. На це також не слід звертати увагу. :)
Брайан Ларсен

2
У той час як RuntimeDirectoryце кращий спосіб зробити це прямо зараз , я натрапив на сервер зі старою версією Systemd (208) , де ця директива не існує, так що ця відповідь є єдиним обхідним маневром.
Давор Кубраніч

Це також все ще здається способом зробити це, якщо вам потрібен каталог, створений і належить іншому користувачеві, ніж користувач сервісу, або для того, щоб каталог зберігався до перезавантаження, або для того, щоб каталог був розподілений між декількома службами.
Перкінс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.