Crea una directory in / var / run all'avvio


39

Avevo un demone che aveva bisogno della sua /var/rundirectory per il suo file PID con il permesso di scrittura concesso all'utente del demone.

Ho scoperto che potevo creare questa directory con questi comandi:

# mkdir /var/run/mydaemon

Quindi potrei cambiare la sua proprietà per l'utente / gruppo in base al quale desideravo eseguire il processo:

# chown myuser:myuser /var/run/mydaemon

Ma questa directory sarebbe ANDATA ogni volta che emettessi un riavvio! Come posso ottenere questa directory da creare ogni volta che la macchina si avvia?

Risposte:


56

Due alternative per fare in modo che systemd crei le directory, in genere la più semplice è dichiarare un RuntimeDirectorynel file di unità del servizio:

RuntimeDirectory=, RuntimeDirectoryMode= Prende un elenco di nomi di directory. Se impostato, una o più directory con i nomi specificati verranno create sotto /run(per i servizi di sistema) o sotto $ XDG_RUNTIME_DIR (per i servizi utente) quando l'unità viene avviata e rimossa quando l'unità viene arrestata. Le directory avranno la modalità di accesso specificata in RuntimeDirectoryMode=e saranno di proprietà dell'utente e del gruppo specificati in User=e Group=. Usalo per gestire una o più directory di runtime dell'unità e associarne la durata al runtime del demone. I nomi di directory specificati devono essere relativi e non possono includere un "/", cioè deve fare riferimento a semplici directory per creare o rimuovere. Ciò è particolarmente utile per i demoni non privilegiati che non possono creare / eseguire directory di runtime a causa della mancanza di privilegi e per assicurarsi che la directory di runtime venga ripulita automaticamente dopo l'uso.

O per le directory di runtime che richiedono configurazioni più complesse o diverse o garanzie a vita, utilizzare tmpfiles.de fare in modo che il pacchetto elimini un file /usr/lib/tmpfiles.d/mydaemon.conf:

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

Ho usato quest'ultimo perché il demone attuale usa il systemd-sysv-generatore ho avuto abbastanza curve di apprendimento per la settimana. Solo quel file .conf e quella riga. Sentiti bene adesso B-)
user24601

Ho già definito quest'ultimo nel mio /usr/lib/tmpfiles.d/php7.3-fpm.confe /usr/lib/tmpfiles.d/php7.2-fpm.confnon crea ancora la /run/phpdirectory.
MarthyM,

3

Ho creato un servizio che avrebbe creato la directory all'avvio:

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

I contenuti di /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

Quindi ho iniziato questo servizio:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Produzione:

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

Infine ho detto al sistema di caricarlo all'avvio:

systemctl enable mydaemon-helper


Ok, immagino che avrei dovuto metterlo nella mia domanda considerando che sono un tale noob. Sto imparando però - grazie a voi ragazzi!
user24601

2
No, creare una risposta è stata la cosa giusta da fare, quindi le persone possono commentarla e anche così non ingombrare la tua domanda. Rispondere alle proprie domande è esplicitamente incoraggiato su SO. E la tua risposta non è neanche sbagliata, è solo che ci sono modi molto migliori per farlo, quindi IMO non avresti dovuto essere sottovalutato. Non dovrebbe nemmeno essere votato. :)
Bryan Larsen,

2
Sebbene RuntimeDirectorysia un modo migliore per farlo ora , mi sono imbattuto in un server con una vecchia versione di systemd (208) in cui quella direttiva non esiste, quindi questa risposta è l'unica soluzione.
Davor Cubranic,

Questo sembra anche essere il modo per farlo se hai bisogno di una directory creata e posseduta da un utente diverso rispetto all'utente del servizio o per la persistenza della directory fino al riavvio o per la condivisione della directory tra più servizi.
Perkins,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.