¿Qué se necesita para que un servicio de Linux sea compatible con chkconfig?

36

Estoy tratando de agregar al inicio automático en el momento de arranque un servicio de Linux a través de

chkconfig -add <servicename> 

y recibo un mensaje que dice

service <servicename> does not support chkconfig

Estoy usando Red Hat Enterprise 4. La secuencia de comandos que estoy tratando de agregar al inicio automático en el momento de arranque es la siguiente:

#!/bin/sh

soffice_start() {   if [ -x /opt/openoffice.org2.4/program/soffice ]; then
        echo "Starting Open Office as a Service"
        #echo " soffice -headless -accept=socket,port=8100;urp;StarOffice.ServiceManager
-nofirststartwizard"
        /opt/openoffice.org2.4/program/soffice
-headless -accept="socket,host=0.0.0.0,port=8100;urp;StarOffice.ServiceManager"
-nofirststartwizard &   else
        echo "Error: Could not find the soffice program. Cannot Start SOffice."   fi }

soffice_stop() {   if [ -x /usr/bin/killall ]; then
        echo "Stopping Openoffice"
        /usr/bin/killall soffice 2> /dev/null   else
        echo "Eroor: Could not find killall.  Cannot Stop soffice."   fi }

case "$1" in  'start')    soffice_start    ;;  'stop')    soffice_stop    sleep 2    ;;  'restart')    soffice_stop    sleep 5  soffice_start    ;;  *)    if [ -x /usr/bin/basename ]; then
        echo "usage: '/usr/bin/basename $0' start| stop| restart"    else
        echo "usage: $0 start|stop|restart"    fi esac
Geo
fuente
es su servicio en init.d /
Rungano

Respuestas:

74

El script debe tener 2 líneas:

# chkconfig: <levels> <start> <stop>
# description: <some description>

por ejemplo:

# chkconfig: 345 99 01
# description: some startup script

345 - levels to configure
99 - startup order
01 - stop order

Después de agregar los encabezados anteriores, puede ejecutar chkconfig --add <service>.

katriel
fuente
El espacio adicional en la segunda línea fue agregado por markdown, no es necesario
katriel
2
Aquí hay más información sobre los niveles de ejecución y otras cosas. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred
Sin embargo, lo anterior no parece agregar los scripts de eliminación adecuados. Necesito chkconfig <service> --level 06 off para obtener explícitamente los scripts de eliminación.
user239558
4

Si bien katriel ya ha respondido esto con el mínimo necesario para crear un guión de inicio, creo que también sería útil mirarlo /etc/init.d/skeletony usarlo como plantilla en la que basar su guión de inicio. Terminarás con un script mucho más consistente y legible.

Kamil Kisiel
fuente
55
Teóricamente un buen consejo, pero /etc/init.d/skeletonno está presente en los sistemas RHEL, solo en Debian y relacionados (Ubuntu, creo).
Harlan
1

Parece que el problema específico de Geo ya se ha resuelto, pero me encontré con un mensaje similar al intentar configurar una aplicación Rails sidekiqcomo un servicio administrado. Explicaré mi solución aquí en caso de que ayude a otros novatos como yo.

Estoy trabajando en una instalación de CentOS, y chkconfig ya está configurado con varios otros servicios como httpd, mysql y redis. Tenga en cuenta que la mayoría de los servicios sólo necesitan ser activados en los niveles de ejecución 3a través 5.

chkconfig --list
> httpd             0:off   1:off   2:on    3:on    4:on    5:on    6:off
> mysqld            0:off   1:off   2:on    3:on    4:on    5:on    6:off
> redis-server      0:off   1:off   2:on    3:on    4:on    5:on    6:off
> (etc...)

Necesitaba agregar un nuevo script para el sidekiqservicio, así que tomé el script en https://gist.github.com/CD1212/5326706 , lo modifiqué para que se ajustara a los parámetros de mi aplicación y lo guardé en /etc/rc.d/init.d/sidekiq(propiedad de root como todos los otros guiones allí).

Sin embargo, cuando intenté registrar este nuevo servicio, recibí el error chkconfig:

sudo chkconfig --add sidekiq
> service sidekiq does not support chkconfig

Después de leer un poco más , descubrí que los números de prioridad definidos en la parte superior de cada script chkconfig deben ser únicos. ¡Un mensaje de error más claro hubiera sido bueno! Otro script tenía el nivel de prioridad de apagado 75, así que cambié el mío a 76 e intenté nuevamente. Aquí está la cabeza de mi script de inicio:

#!/bin/bash
#
# sidekiq    Init script for Sidekiq
#
# chkconfig: 345 99 76
# processname: sidekiq
# pidfile: /var/www/visual_testing_tool/sidekiq.pid
# description: Starts and Stops Sidekiq message processor for the Rails app.
#

Esta vez, sudo chkconfig --add sidekiqno dio ninguna queja. Luego, cuando corrí sudo chkconfig --list sidekiq, el servicio sidekiq se mostró como onpara los niveles de ejecución apropiados.

Topher Hunt
fuente
0

Los números de prioridad no necesitan ser únicos. Solo representan un orden de servicios.

ls -l /etc/rc.d/rc3.d/*oracle lrwxrwxrwx 1 root root 16 sep 16 12:28 /etc/rc.d/rc3.d/S99oracle -> ../init.d/oracle

ls -l /etc/rc.d/rc3.d/*it
lrwxrwxrwx 1 raíz raíz 12 sep 16 12:36 /etc/rc.d/rc3.d/S99it -> ../init.d/it

Chkconfig no tuvo problemas al agregar el servicio "it". De lo contrario, estaría limitado a 100 servicios.

También en mi ejemplo, se ejecutaría antes de Oracle porque los scripts se ejecutan alfabéticamente.

George Zamroz
fuente