Utwórz katalog w katalogu / var / run at boot

39

Miałem demona, który potrzebował własnego /var/runkatalogu dla swojego pliku PID z uprawnieniem do zapisu przyznanym użytkownikowi demona.

Odkryłem, że mogę utworzyć ten katalog za pomocą następujących poleceń:

# mkdir /var/run/mydaemon

Następnie mógłbym zmienić jego własność na użytkownika / grupę, w ramach której chciałbym uruchomić proces:

# chown myuser:myuser /var/run/mydaemon

Ale ten katalog zniknąłby za każdym razem, gdy uruchamiam ponownie! Jak mogę utworzyć ten katalog przy każdym uruchomieniu komputera?

użytkownik24601
źródło

Odpowiedzi:

56

Dwie alternatywy dla systemowego tworzenia katalogów, zazwyczaj najłatwiejsze jest zadeklarowanie RuntimeDirectoryw pliku jednostkowym twojej usługi:

RuntimeDirectory=, RuntimeDirectoryMode= Pobiera listę nazw katalogów. Jeśli jest ustawiony, jeden lub więcej katalogów o podanych nazwach zostanie utworzonych poniżej /run(dla usług systemowych) lub poniżej $ XDG_RUNTIME_DIR (dla usług użytkownika) podczas uruchamiania urządzenia i usuwanych po zatrzymaniu urządzenia. Katalogi będą miały tryb dostępu określony w RuntimeDirectoryMode=i będą własnością użytkownika i grupy określonej w User=i Group=. Skorzystaj z tego, aby zarządzać jednym lub kilkoma katalogami wykonawczymi urządzenia i powiązać ich żywotność z środowiskiem uruchomieniowym demona. Podane nazwy katalogów muszą być względne i nie mogą zawierać „/”, tzn. muszą odnosić się do prostych katalogów do tworzenia lub usuwania. Jest to szczególnie przydatne w przypadku nieuprzywilejowanych demonów, które nie mogą tworzyć katalogów wykonawczych w / uruchamianych z powodu braku uprawnień, oraz aby upewnić się, że katalog wykonawczy jest czyszczony automatycznie po użyciu.

Lub w przypadku katalogów wykonawczych, które wymagają bardziej złożonej lub innej konfiguracji lub dożywotnich gwarancji, użyj tmpfiles.di upuść plik z pakietu /usr/lib/tmpfiles.d/mydaemon.conf:

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -
HBruijn
źródło
Użyłem tego drugiego, ponieważ rzeczywisty demon używa systemd-sysv-generatori mam wystarczająco dużo krzywych uczenia się przez tydzień. Tylko ten jeden plik .conf i ten jeden wiersz.
Czuję się
Mam już tę drugą zdefiniowaną w mojej /usr/lib/tmpfiles.d/php7.3-fpm.confi /usr/lib/tmpfiles.d/php7.2-fpm.confnadal nie tworzy ona /run/phpkatalogu.
MarthyM
3

Stworzyłem usługę, która na początku tworzyłaby katalog:

vim /etc/systemd/system/mydaemon-helper.service

Zawartość /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

Potem uruchomiłem tę usługę:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Wydajność:

[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.

Na koniec powiedziałem systemowi, aby załadował go podczas uruchamiania:

systemctl enable mydaemon-helper

użytkownik24601
źródło
Ok, chyba powinienem umieścić to w moim pytaniu, biorąc pod uwagę, że jestem takim noobem. Uczę się jednak - dzięki wam!
user24601
2
Nie, stworzenie odpowiedzi było właściwą rzeczą, aby ludzie mogli komentować, a także nie zakłócać twojego pytania. Odpowiedzi na własne pytania są wyraźnie zalecane w SO. Twoja odpowiedź też nie jest zła, po prostu istnieją o wiele lepsze sposoby, aby to zrobić, więc IMO nie powinna była cię lekceważyć. Nie należy też go oceniać. :)
Bryan Larsen
2
Choć RuntimeDirectoryjest lepszy sposób to zrobić teraz , wpadłem na serwerze ze starą wersją Systemd (208), w których dyrektywa nie istnieje, więc ta odpowiedź jest tylko obejście.
Davor Cubranic
Wydaje się, że jest to również sposób, aby to zrobić, jeśli potrzebujesz katalogu utworzonego i będącego własnością innego użytkownika niż użytkownik usługi, lub jeśli katalog będzie trwał do momentu ponownego uruchomienia, lub katalog będzie współużytkowany przez wiele usług.
Perkins,