Iniciar servicio en systemd sin usar enable

14 envíos / 0 nuevos
Último envío
#1 Dom, 13/10/2019 - 12:47
arielelmusico
Imagen de arielelmusico
Desconectado/a
se unió: 13/10/19

Iniciar servicio en systemd sin usar enable

Hola a todos. La distro es Debian Stretch. El modo de arranque es "multi-user.target". Tengo un archivo .service en el directorio /lib/systemd/system. El problema, básicamente, es que no puedo configurar el arranque de un determinado servicio en el arranque con el comando "systemctl enable service". Esto se debe a que no tengo un archivo de configuración .target en el el directorio /etc/systemd/system. Se que existe una manera de editar otro .target.wants para que me levante ese servicio. La misma ayuda del sistema me lo dice. Pero hasta ahora no puedo lograrlo. No se cual editar ni como editarlo. O sea, que lineas agregar. Espero puedan ayudarme. Gracias.

 

Dom, 13/10/2019 - 13:31
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

No me queda claro algo ¿creaste un .service    y necesitas que se cargue al inicio ?? 

Sí creaste dicho  .service  lo razonable es  ponerlo en /etc/systemd/system   , 

Luego al habilitarlo con  

systemd  enable  script.service

Te creara un enlace simbólico  en el  .target.wants   que configuraste en dicho servicio  (si te fijas en el listado  

por ejemplo de    multi-user.target.wants    debiera figurar  

Mar, 15/10/2019 - 10:43 (Responder a #2)
arielelmusico
Imagen de arielelmusico
Desconectado/a
se unió: 13/10/19

Hola caliban, gracias por tu respuesta. Si, efectivamente. Cree el servicio, pero la idea es que se encuentre en el directorio /lib/systemd/system y poder ejecutarlo desde ahí. Dejo una captura de imagen del mensaje de ayuda de systemd. Creo que el primer punto es la respuesta pero no se como vincular otro archivo en el runlevel. Saludos.

captura de pantalla

Mar, 15/10/2019 - 12:40
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

Emm no entiendo del todo como  queres  ejecutarlo ,mejor dicho  quien se encarga de ejecutarlo .( y/o  por cual causa queres que  quede en  /lib/systemd/system )

El .service puede ser  ejecutado  automáticamente  ,por ejemplo  si es configurado que lo levante todos los services de multi-user ,  o  que otro service lo haga ,  pero eso debe ser especificado en el archivo de configuracion . entonces ¿quien debe habilitar dicho service según vos queres ?? 

Copia y pega acá  el archivo del .service que creaste y vemos a partir de eso .

En cuanto a los runlevels  y crear tu propio .target  como guía en castellano  fijate acá 

Mar, 15/10/2019 - 16:34
arielelmusico
Imagen de arielelmusico
Desconectado/a
se unió: 13/10/19

caliban, gracias por tu ayuda y constancia. Gracias tambien por el enlace hacia la wiki de arch. Efectivamente, cuando quiero habilitar el servicio con enabled, me da un error y en la ayuda, la primera respuesta (que creo es la adecuada para este caso) dice: "una unidad puede habilitarse estáticamente al vincularse simbólicamente desde el directorio .wants / o .requires / de otra unidad". Eso es lo que quiero hacer. Habilitar este servicio de manera estática modificando otra unidad. Es lo que debo hacer ya que no tengo permitido, en este caso, generar un archivo de configuración propio. Mando el contenido del archivo de servicio que tengo en /lib/systemd/system. 

[Unit]
Description=xinit Server
Conflicts=getty@tty7.service plymouth-quit.service
After=systemd-user-sessions.service getty@tty7.service plymouth-quit.service
OnFailure=plymouth-quit.service

[Service]
ExecStart=/usr/bin/xinit
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=1s
IgnoreSIGPIPE=no
StandardOutput=syslog
StandardError=inherit
EnvironmentFile=-/etc/default/locale

 

Mar, 15/10/2019 - 17:08
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

Agregale al final de este scritp 

[Install]
WantedBy=multi-user.target

Entonces  podrás habilitarlo  (enable) al inicio   y lo cargara   multi-user , si es el caso  si vas a 

/etc/systemd/system/multi-user.target.wants  encontraras que ha creado un enlace simbólico adecuado.

Edito: En donde debieras explorar opciones  es  ( y el mensaje de error lo indica )  en [Install] tanto en el script que mostras  o en otro que  lo habilite .

Important [Install] Section Options
Option	Description

Alias	A space-separated list of additional names for the unit. Most systemctl commands, excluding systemctl enable, can use aliases instead of the actual unit name.

RequiredBy, WantedBy	The current service will be started when the listed services are started. See the description of Wants and Requires in the [Unit] section for details.

Also	Specifies a list of units to be enabled or disabled along with this unit when a user runs systemctl enable or systemctl disable.

 

Mié, 16/10/2019 - 09:17 (Responder a #6)
arielelmusico
Imagen de arielelmusico
Desconectado/a
se unió: 13/10/19

Hola caliban. Funciono perfectamente. Esas lineas extras en el archivo eran las necesarias. Gracias por tu ayuda. Espero poder colaborar en el futuro. Saludos.

Mié, 16/10/2019 - 09:25 (Responder a #7)
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16

Por añadir algo, los servicios que te creas tu no  es necesario que estén en la ruta donde están los otros propios de systemd. pueden estar en una ruta local, como por ejemplo /usr/local/lib/systemd (no recuerdo si es ahi exactamente). De esta forma puedes diferenciar entre los propios del sistema y los tuyos. Incluso puedes tener servicios de usuarios, tanto en las rutas de systemd (el mismo tiene algunos que solo inicia el usuario y no el sistema), como en una ruta en tu home como ~/config/systemd/user. Estos ultimos se ejecutan sin privilegios de administrador con el comando systemctl --user. Hay que aprender a separar cosas, así más adelante te será más facil diferenciar servicios y  aplicaciones del propio sistema o instaladas manualmente.

 

Edit.....

Yya que estoy, mírate lo de los targets, que serían los equivalentes a los niveles de ejecución que se usarían con sysv-init, así de este modo sabrá que target necesita cada servicio nuevo que quieras añadir.

  No hay bar que por bien no venga....
Mié, 16/10/2019 - 11:44
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

El punto es  que indica que :

..........................................................................................................................

"Eso es lo que quiero hacer. Habilitar este servicio de manera estática modificando otra unidad. Es lo que debo hacer ya que no tengo permitido, en este caso, generar un archivo de configuración propio. "

...............................................................

Y entiendo que no se le permite modificar lo que ya tiene ni agregar algo ,aun en una ruta adecuada como 

/etc/systemd/system/user ,,   etc .

Mié, 16/10/2019 - 12:18
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16

Un servicio con ese contenido no lo veo en mi sistema por un lado. Eso de "no  tengo permitido" no me acaba de cuadrar, ya que si ese servicio no existe en una instalación estándar es que se ha creado por el usuario y puesto ahi, luego si lo ha tenido permitido. Lo que ha modificado no implica usar otra unidad o modificarla, sino dejar el archivo correctamente.

Si las cosas no se explican bien, dan lugar a confusiones, y yo creo que lo que he entendido y luego he recomendado es correcto. "no puedo hacer mi archivo, pero si puedo modificar otro que alguien ha hecho" es lo que se deduce de todo lo que ha dicho (el nombre de archivo ni aparece en todo el post, p.e.), y a todas luces, como he dicho, se de duce que "es algo que he hecho pero no tengo permitido"...

 

Básicamente, se ha hecho un .service incorrecto y no podía iniciarlo al no tener asociado ningun target... "no tengo permitido"="no se en que target va". No hace falta crear nada nuevo esté permitido o no.

Si, ya se que es una discusión tonta, pero para mi el caso es ese y está planteado el asunto mal desde el principio y se ha tenido que "adivicinar" que quería hacer exactamente, para luego resultar que simplemente se había creado mal ese .service (y como es un .service creado, de ahi mi consejo de usar otra ruta para evitar futuras confusiones).

  No hay bar que por bien no venga....
Mié, 16/10/2019 - 12:44
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

No para nada es una discusión ni critica a tu comentario, Panko ! solo aclaro que , sugerí una opción básica  para resolver el asunto y es absolutamente claro que los que intentamos responder la mayor parte de las veces tenemos  " adivinar" que quieren  decir o preguntar en un tema dado , por que la suma de mala información suministrada  y pésima redacción  da para interpretar cualquier cosa .

Usualmente facilitaría todo si suministraran toda TODA la información necesaria , y preguntaran con con simples palabras lo que intentan hacer o lo que no logran obtener .

Quizá debiéramos volver al estilo del viejo foro   un tema mal presentado te lo borraban , y tenías que intentarlo nuevamente presentándolo mejor , tantas veces como la moderación lo considerara necesario.

Pero estamos en tiempos "amigables"  y los usuarios de ahora se  dañan facilmente ,,,,

@arielelmusico, no lo tomes personal  , estoy hablando en términos generales ,se entiende que quien no sabe o sabe poco se encuentra en dificultades para expresar sus dudas o sus problemas ,pero usualmente es mas que ese el problema . 

Jue, 17/10/2019 - 18:34 (Responder a #11)
arielelmusico
Imagen de arielelmusico
Desconectado/a
se unió: 13/10/19

Hola. Para nada lo tomo personal. Y agradezco la ayuda. No es la intención generar confusión. Si fuera una pregunta que pudiera generar puntualmente, en lugar de preguntarlo en un foro, haría la búsqueda en google, u otro servicio similar. Pregunte lo mejor posible, y por suerte, me pudieron ayudar. Por eso estoy sumamente agradecido. Otra opción que me pasaron, que hace exactamente lo mismo que la solución que me paso Caliban, es la de crear un enlace de forma manual de la siguiente manera:

cd /etc/systemd/system/multi-user.target.wants/

ln -s /lib/systemd/system/xinit.service xinit.service

Como dije antes, gracias por la ayuda. Seguro voy a necesitar mas en el futuro, jejejejeje. Saludos.

Jue, 17/10/2019 - 19:11
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

Lo que te han indicado  es crear un enlace simbólico  hacia el service hacia  el .target  que lo solicitara , esto es lo que hace systemd  cuando   habilitas un .service   con la opción 'enable ' .

Por ejemplo  si tenes un  service configurado para ser requerido por  multi-user ,  si  listas el contenido  en 

/etc/systemd/system/multi-user.target.wants   no figurara dicho enlace simbólico  previamente ; al configurar el 'enable'  y volver a listar el contenido de dicho directorio aparecerá el enlace simbólico correspondiente 

por ejemplo mira parte del contenido   de multi-user  :

 ls -l /etc/systemd/system/multi-user.target.wants
.......................................................
lrwxrwxrwx 1 root root 31 may 27  2015 tor.service -> /lib/systemd/system/tor.service
lrwxrwxrwx 1 root root 34 abr  2  2014 vsftpd.service -> /etc/systemd/system/vsftpd.service
lrwxrwxrwx 1 root root 32 abr 24  2018 wicd.service -> /lib/systemd/system/wicd.service
.................................................................................

ls -l  =  lista el contenido de dicho directorio     

  ->   = indica un enlace simbólico.

Para comenzar a entender systemd y su funcionamiento  requiere  bastante lectura y paciencia, para comenzar 

podes  pasar por acá 

https://exdebian.org/wiki/systemd

Pero no te quedes solo con esto ,busca mas información en otros lados y vas ir armando el rompecabezas de a poco .

Lun, 21/10/2019 - 09:39 (Responder a #13)
arielelmusico
Imagen de arielelmusico
Desconectado/a
se unió: 13/10/19

De a poco empezaré a meterme de lleno en este tema. Gracias por la ayuda. Saludos.