Cree un directorio en / var / run en el arranque


39

Tenía un demonio que necesitaba su propio directorio /var/runpara su archivo PID con permiso de escritura otorgado al usuario del demonio.

Descubrí que podía crear este directorio con estos comandos:

# mkdir /var/run/mydaemon

Entonces podría cambiar su propiedad al usuario / grupo bajo el cual deseaba ejecutar el proceso:

# chown myuser:myuser /var/run/mydaemon

¡Pero este directorio desaparecería cada vez que emita un reinicio! ¿Cómo consigo crear este directorio cada vez que la máquina arranca?

Respuestas:


56

Dos alternativas para que systemd cree directorios, generalmente la más fácil es declarar un RuntimeDirectoryarchivo de unidad de su servicio:

RuntimeDirectory=, RuntimeDirectoryMode= Toma una lista de nombres de directorio. Si se establece, se crearán uno o más directorios con los nombres especificados a continuación /run(para servicios del sistema) o por debajo de $ XDG_RUNTIME_DIR (para servicios de usuario) cuando se inicie la unidad y se eliminen cuando la unidad se detenga. Los directorios tendrán el modo de acceso especificado en RuntimeDirectoryMode=, y serán propiedad del usuario y el grupo especificado en User=y Group=. Use esto para administrar uno o más directorios de tiempo de ejecución de la unidad y vincular su vida útil al tiempo de ejecución del demonio. Los nombres de directorio especificados deben ser relativos y no pueden incluir un "/", es decir, debe referirse a directorios simples para crear o eliminar. Esto es particularmente útil para demonios no privilegiados que no pueden crear directorios de tiempo de ejecución en / run debido a la falta de privilegios, y para asegurarse de que el directorio de tiempo de ejecución se limpia automáticamente después de su uso.

O para directorios de tiempo de ejecución que requieren configuraciones más complejas o diferentes o garantías de por vida, use tmpfiles.dy haga que su paquete suelte un archivo /usr/lib/tmpfiles.d/mydaemon.conf:

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

Usé este último porque el demonio real usa el systemd-sysv-generatory he tenido suficientes curvas de aprendizaje para la semana. Solo ese archivo .conf y esa línea. Sentirse bien ahora B-)
— user24601

Ya he definido este último en mi /usr/lib/tmpfiles.d/php7.3-fpm.confy /usr/lib/tmpfiles.d/php7.2-fpm.conftodavía no crea el /run/phpdirectorio.
— MarthyM

3

Creé un servicio que haría el directorio al inicio:

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

Los contenidos de /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

Entonces comencé este servicio:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Salida:

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

Por último, le dije al sistema que lo cargara al inicio:

systemctl enable mydaemon-helper


Ok, supongo que debería haber puesto esto en mi pregunta considerando que soy un novato. Aunque estoy aprendiendo, ¡gracias a ustedes!
— user24601

2
No, crear una respuesta fue lo correcto, para que la gente pueda comentar sobre ella y también para que no atesta su pregunta. Contestar sus propias preguntas se recomienda explícitamente en SO. Y su respuesta tampoco es incorrecta, es solo que hay formas mucho mejores de hacerlo, por lo que en mi opinión, no debería haber sido rechazado. Tampoco debería ser votado. :)
— Bryan Larsen

2
Si bien RuntimeDirectoryes una mejor manera de hacerlo ahora , me encontré con un servidor con una versión anterior de systemd (208) donde esa directiva no existe, por lo que esta respuesta es la única solución.
— Davor Cubranic

Esta también parece ser la forma de hacerlo si necesita un directorio creado y propiedad de un usuario diferente al usuario del servicio, o para que el directorio persista hasta el reinicio, o para que el directorio sea compartido entre múltiples servicios.
— Perkins
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.