Escribir archivos básicos de servicio systemd


103

Estoy desarrollando una aplicación Nodejs con la que el usuario interactúa a través de HTTP en localhost. Prácticamente no hay parámetros y el demonio prácticamente no tiene dependencias y solo necesita estar listo para el tiempo de inicio de sesión.

Me gustaría seguir los modismos en cada plataforma para los scripts de inicio, y eso significa Upstart en Ubuntu y systemd en Fedora.

  • ¿Hay buenos tutoriales para escribir archivos de sistema systemd?
  • ¿Hay alguna 'mejores prácticas' a tener en cuenta?

He encontrado estos recursos:

Estoy buscando principalmente una especie de API como referencia, así como un formato básico a seguir.


La página Wiki de Arch Linux sobre systemd tiene una sección interesante sobre cómo escribir archivos de servicio.
Rudy Matela

> man systemd.service>> man systemd.unit
truezion

Respuestas:


29

Comenzaría con las páginas del manual de Systemd . Representan un recurso integral del sistema y los servicios.

También están las preguntas frecuentes de Freedesktop Systemd .


43
Las páginas de manual serán útiles (aunque desearía que fuera más limpio), pero ¿hay un tutorial básico de archivos del sistema? Como qué partes son necesarias, qué partes se recomiendan y qué partes son opcionales. Las páginas del manual parecen suponer que ya soy un experto en archivos de sistema systemd, que no lo soy.
beatgammit

No que yo sepa, desafortunadamente. Probablemente se supone que si está escribiendo initscripts, ya sabe cómo escribir initscripts. Mira a través de los guiones Arch y elegir uno que es similar a lo que necesita: archlinux.org/packages/community/i686/systemd
jasonwryan

1
¡Gracias! Con su ayuda y el blog que encontré, pude conseguir que uno básico funcionara. Systemd parece mucho más agradable que el advenedizo o el antiguo demonio systemv init.
beatgammit

49
Quien tiene tiempo allí vive para COMENZAR con eso. Quiero decir, si sabes lo que estás haciendo, es una gran referencia, pero las páginas del manual son complejas.
Jonathan Komar

1
@ macmadness86 El OP estaba buscando una fuente autorizada (ver el último párrafo); para la mayoría de las necesidades, leer el archivo de servicio para una aplicación similar y luego consultar partes específicas de la manpágina será más que suficiente para llegar allí. En realidad son bastante sencillos.
jasonwryan

180

El siguiente ejemplo está inspirado en este enlace, que en realidad no menciona todos los pasos y se enumera solo para acreditar la fuente: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Paso 1 : Creé este archivo (ubicación de la nota) que esencialmente dispara un proceso bash con un argumento extendido. Podrías disparar tu propio comando que podría ser diferente de bash.

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

Paso 2 :

Recargar systemd:

systemctl daemon-reload

Comience el nuevo servicio:

systemctl enable foo

(de manera similar puedes disablehacerlo)

(opcional) Paso 3 : debería iniciarse automáticamente en el próximo reinicio en modo multiusuario (ejecutar nivel 3) pero si desea iniciarlo de inmediato:

systemctl start foo
systemctl status foo # optional, just to verify

Actualización: para completar, debo agregar que ubuntu bionic parece tener una página de manual muy completa. RTFM aquí


57
¡Gracias por publicar un tutorial rápido y no solo vincular a páginas de manual externas!
Tobias J

2
systemctl tiene un atajo de comando cat, como referencia.
Andy Bettisworth

¿Cuál es el acceso directo del comando cat? ¿Le gusta una forma de crear y editar los archivos de control del sistema sin ingresar la ruta completa?
JpaytonWPD

¿Cuáles son los permisos que este archivo debería tener idealmente?
knocte

2
De acuerdo con la página de manual systemd.unit, debe ponerlo /etc/systemd/system. / usr / lib / systemd es donde los paquetes de distribución adecuados colocan sus archivos.
wbkang

4

2
Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Stephen Rauch

1
@StephenRauch Sé que los enlaces simples no son muy bienvenidos, pero este es un tema enorme y no es fácil resumirlo en una respuesta.
caracal

Esta fue la guía más legible que encontré. Esta es una buena respuesta. :-)
trata bien tus modificaciones el

DigitalOcean también tiene un conjunto bastante completo de tutoriales y documentación asociada: digitalocean.com/community/tutorials/…
irbanana
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.