Forma correcta de instalar un servicio personalizado personalizado


51

Estoy usando el servicio de arranque para los servicios en mis servidores. Escribir un archivo conf y colocarlo /etc/inites bastante fácil, pero parece que no se instala por completo. Por un lado, el service --status-allno enumera mi nuevo servicio. Lo comprobé y si hago un enlace en /etc/init.dal /lib/init/ubstart-jobque voy a mostrar en el estado. Pero hacer esto manualmente me hace pensar que no lo estoy haciendo bien, y bien puede haber otros pasos de configuración que no se están haciendo.

¿Cuál es la forma correcta de instalar un servicio inicial de modo que esté registrado correctamente en todas las herramientas relacionadas con los servicios?


2
Este tipo respondió una de mis preguntas utilizando el servicio de arranque y dio una explicación detallada, podría señalar un paso que podría haberse perdido askubuntu.com/a/278128/75967
Meer Borg

1
Quiso decir /lib/init/upstart-job?
Dalore

Respuestas:


46

Cuando inicialmente copia un nuevo archivo conf en la carpeta / etc / init, debe llamar a:

initctl reload-configuration

De esta manera, su advenedizo debería estar debidamente registrado.


8
Por lo tanto, esto configura correctamente el trabajo (es decir, starty el stoptrabajo), pero no hace que el trabajo se muestre en todo el estado. Todavía tenía que agregarlo manualmente /etc/init.d/para que eso sucediera.
James McMahon

1
@JamesMcMahon Es necesario ejecutar initctl listcomandos con sudo: sudo initctl list. De esa manera verá la lista completa de servicios.
Shahriyar Imanov

Por qué el sudo, no parece cambiar la salida de la lista initctl en absoluto.
LovesTha

@JamesMcMahon, I still had to manually add it to /etc/init.d. ¿Aún tenías que agregar qué? Eso significa que, además de un X.confarchivo agregado /etc/init, ¿también es necesario agregar un archivo /etc/init.d?
Kevin Meredith

@KevinMeredith, lo siento, no fui más detallado. Han pasado 2 años y no puedo recordar los detalles. Si observa alguna documentación de init.d, debería ser clara.
James McMahon

18

Consulte el manual de servicio:

service --status-all ejecuta todos los scripts de inicio, en orden alfabético, con el comando de estado. Esta opción solo llama al estado de los trabajos sysvinit, los trabajos iniciales pueden consultarse de manera similar con la lista initctl.

(énfasis añadido)

Es por eso que agregarlo a /etc/init.d (donde se encuentran los trabajos de sysvinit) hizo que funcionara. Entonces: intente ejecutar initctl list en su lugar :).


That's why adding it ¿Agregar qué? Además del my_service.confarchivo /etc/init, ¿también es necesario tener un /etc/init.darchivo?
Kevin Meredith

No funciona con Ubuntu 16.04.4 LTS \\ $ initctl list initctl: el nombre "com.ubuntu.Upstart" no existe $ sudo initctl list initctl: no se puede conectar a Upstart: no se pudo conectar al socket / com / ubuntu / upstart: Conexión rechazada
nueve

13

Para servicios SysV

Asegúrese de seguir los siguientes pasos al agregar / crear un nuevo servicio en Ubuntu.

  1. Crea el archivo de servicio en /etc/init.d/<service name>
  2. chmod 700 /etc/init.d/<service name>
  3. update-rc.d <service name> defaults
  4. update-rc.d <service name> enable

Ahora veo tu servicio en

service --status-all

15
su respuesta se relaciona con sysv y no con el advenedizo. Es posible que desee eliminarlo.
jcomeau_ictx

3
Es una respuesta útil de hecho.
ATorras

aunque se relaciona con otro servicio, de hecho es útil
wuppi

1

Descubrí que un error en el archivo .conf puede hacer que el trabajo no sea reconocible para initctl. por ejemplo, tener una setuidlínea en Upstart versión 1.3 o anterior.


1

Si bien la respuesta actual elegida es correcta para agregar el nuevo servicio al arranque, no es particularmente útil para averiguar POR QUÉ una configuración en / etc / init / no se carga: la pieza que falta está usando init-checkconf primero para asegurarse su configuración es válida y luego usa reload-configuration:

####Test the new config - resolving any issues before continuing:
ERROR: File /etc/init/test.conf: syntax invalid:
test.conf:35: Unterminated quoted string

####then fix and recheck:
# init-checkconf /etc/init/test.conf
File /etc/init/test.conf: syntax ok

####then reload:
# initctl reload-configuration

#### and start:
# start test
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.