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.