Ayuda con systemd

adeptus24

Lanero Regular
14 Mar 2017
3
Buenas,

Soy usuario de Centos desde hace un tiempo y estoy teniendo algunos problemas con el nuevo sistema de servicios de Centos 7... el caso es que necesito levantar varias instancias de un software como servicio, cada instancia tiene un fichero de configuración... el caso es que tengo un script que llama al arranque del software y le pasa el fichero de configuración entre otras acciones como generacion de pidfile, etc...

software_nodo.service

El tema es que no consigo sacar el nombre del nodo para pasarselo al script, en centos 6 con el script de arranque lo que hacía era:

NODO=`echo basename ${0} | awk -F'[_.]' '{print $2}'`

Pero en el servicio que creo uso la siguiente opcion:

Environment=NODO=`basename $0 | awk -F'[_.]' '{print $2}'`
o
Environment=NODO=`echo basename ${0} | awk -F'[_.]' '{print $2}'`


Y me da error... alguien sabe como sacar a una variable en el servicio el nombre del nodo directamente del nombre del fichero del servicio para pasarselo al script en el ExecStart

Ejemplo:

Nombre del servicio= software_pepe.service

Environment=NODO=`basename $0 | awk -F'[_.]' '{print $2}'`
ExecStart=/path_completo/script.sh

y que ejecute:

/path_completo/script.sh

Luego ya en el script se sustituye la variable NODO recogidas en el servicio con Environment para crear el PidFile, etc...

Un saludo y gracias de antemano!
 
Buenas,

Me autorespondo...

Ya lo he conseguido de la siguiente forma:

ExecStart=/path_completo/script.sh %n

Ahora tengo una duda... el script lo que hace es por ejemplo un start y stop... entonces tengo declarado esto:

ExecStart=/path_completo/script.sh %n start
ExecStop=/path_completo/script.sh %n stop

Y en el script hay un case... si se pasa start arrancar el servicio con el fichero de configuracion prueba1 por ejemplo, sacandolo con el %n... y si le pasas stop pues mata el proceso con el pidfile que le indico en el script... pero al arrancar el servicio con "systemctl start software_pepe.service" me dice lo siguiente, esos mensajes son los echo que tengo declarados en cada CASE para que indique que esta arrancando y deteniendo el software...

Mar 15 20:09:04 host script.sh[5192]: INICIANDO pepe ...
Mar 15 20:09:04 host script.sh[5205]: DETENIENDO pepe...

Si lanzo a mano el script como lo haria el execstart o execstop funciona

sh /path_completo/script.sh software_pepe.service start <-- <-- esto arranca el servicio
sh /path_completo/script.sh software_pepe.service stop <-- <-- esto lo para sin problemas

Alguna sugerencia de que puede estar pasando?? he probado a generar un fichero con START=start y STOP=stop... pasarle "EnvironmentFile" y al script ponerle $START y $STOP leyendo algun problema al pasarle mas de un argumento y creyendo que era problema de pasarle el %n y start a la vez pero nada... no consigo hacerlo funcionar...
 
Buenas,

Solucionado, por si le sirve a alguien... para que no este en fallo el servicio dentro del script en la funcion stop la señal que hay que enviar al proceso para matarlos es "Hang Up" con "kill -HUP $PID" o "kill -1 $PID", el pid ya lo sacáis como veáis... en mi caso a una variable $PID.

Saludos.
 

Los últimos temas