2011-02-27 37 views
23

Buenos días, programadores. Tengo un problema. Por favor ayuda. Estoy creando un servicio, que debe cargarse automáticamente cuando se carga Linux. Entonces, copié la secuencia de comandos en el directorio /etc/rc.d/init.d o /etc/init.d/. Pero cuando estoy preformación el comandoEl servicio no es compatible con chkconfig

chkconfig --add listOfProcesses 

se produce un error:

service listOfProcesses doesn't support chkconfig 

Aquí es el contenido del guión. Encontré la primera versión en Google y la usé como patrón.

#!/bin/bash 
# listOfProcesses Start the process which will show the list of processes 
# chkconfig: 345 110 02 
# description: This process shows current time and the list of processes 
# processname: listOfProcesses 
### BEGIN INIT INFO 
# Provides: 
# Required-Start: 
# Required-Stop: 
# Default-Start: 3 4 5 
# Default-Stop: 0 1 2 6 
# Short-Description: shows current time and the list of processes 
# Description: This process shows current time and the list of processes 
### END INIT INFO 
# Source function library. 
KIND="listOfProcesses" 
    start() { 
      echo -n $"Starting $KIND services: " 
      daemon /home/myscript 
      echo 
    } 

    stop() { 
      echo -n $"Shutting down $KIND services: " 
      killproc /home/myscript 
      echo 
    } 

    restart() { 
       echo -n $"Restarting $KIND services: " 
        killproc /home/myscript 
       daemon /home/myscript 
       echo 
    } 

    case "$1" in 
     start) 
       start 
      ;; 
     stop) 
       stop 
      ;; 
     restart) 
       restart 
      ;; 
     *) 
      echo $"Usage: $0 {start|stop|restart}" 
      exit 1 
    esac 
    exit $? 

exit 0; 

La segunda versión se realizó a partir de la secuencia de comandos cron. Encontré el script cron, lo copié y lo cambié, así que lo usé como patrón.

#!/bin/sh 
# 
# crond   Start/Stop the cron clock daemon. 
# 
# chkconfig: 2345 90 60 
# description: cron is a standard UNIX program that runs user-specified \ 
#    programs at periodic scheduled times. vixie cron adds a \ 
#    number of features to the basic UNIX cron, including better \ 
#    security and more powerful configuration options. 

### BEGIN INIT INFO 
# Provides: crond crontab 
# Required-Start: $local_fs $syslog 
# Required-Stop: $local_fs $syslog 
# Default-Start: 2345 
# Default-Stop: 90 
# Short-Description: run cron daemon 
# Description: cron is a standard UNIX program that runs user-specified 
#    programs at periodic scheduled times. vixie cron adds a 
#    number of features to the basic UNIX cron, including better 
#    security and more powerful configuration options. 
### END INIT INFO 

rights=whoami; 
root=root; 
[ -f "$rights"=="$root" ] || { 
echo "this programme requires root rights"; 
exit 1; 
} 

# Source function library. 
. /etc/rc.d/init.d/functions 

start() { 
    echo -n $"Starting $KIND services: "; 
    daemon showListOfProcesses; 
} 

stop() { 
echo -n $"Shutting down $KIND services: "; 
killproc showListOfProcesses; 
} 

restart() { 
stop 
start 
} 

reload() { 
    restart; 
} 

force_reload() { 
    # new configuration takes effect after restart 
    restart 
} 

case "$1" in 
start) 
    start 
    ;; 
stop) 
    stop 
    ;; 
restart) 
    restart 
    ;; 
reload) 
    reload 
    ;; 
force-reload) 
    force_reload 
    ;; 
*) 
    echo $"Usage: $0 {start|stop|restart|reload|force-reload}" 
    exit 2 
esac 
exit $? 

# Show the list of processes 
function showListOfProcesses { 
    top > /dev/tty2; 
} 

Pero la situación no ha cambiado. ¿Cuál es el problema? ¿Qué está mal en el guión?

Respuesta

42

vistazo a todas las secuencias de comandos que chkconfig puede activar o desactivar en /etc/rc.d/init.d, usted notará que la parte superior unos comentarios son muy importantes. Ver How-To manage services with chkconfig and service

#!/bin/sh 
# 
# crond   Start/Stop the cron clock daemon. 
# 
# chkconfig: 2345 90 60 
# description: cron is a standard UNIX program that runs user-specified \ 
#    programs at periodic scheduled times. vixie cron adds a \ 
#    number of features to the basic UNIX cron, including better \ 
#    security and more powerful configuration options. 

Usted tiene un script llamado listofprocesses pero a chkconfig este script se parece crond debido a la 3ª línea y por lo tanto no encontrar cualquier secuencia de comandos llama listofprocesses

Usted también sin duda desea cambie chkconfig: 2345 90 60. Que dice en qué niveles de ejecución debe estar (en este caso 2, 3, 4 y 5), cuál es su orden de inicio es (90) y cuál es su orden de destrucción (60).

Puede verificar que el servicio esté configurado correctamente con chkconfig --list listofprocesses.

+0

Pero cuando cambio el nombre de la secuencia de comandos, dice que el servicio no es compatible con chkc onfig El problema ha sido resuelto.No sé lo que quería bash, pero en algún momento este script ha funcionado normalmente – user565447

+5

Esta respuesta en realidad no señala todas las causas de raíz. Sí, es posible que la línea crond haya sido parcialmente responsable, pero la línea 'chkconfig: ' tiene un valor incorrecto. ** La prioridad de inicio debe ser un valor de 0-99 **. – Jake88

3

Parece la prioridad máxima es 99, al menos en CentOS 6.5, que es con lo que estoy jugando ahora mismo.

-1

También me enfrentaba a este problema y no se pudo llamar a la función de detención durante el apagado. Encontré la solución después de probar tantas sugerencias en la red. Necesita agregar "touch/var/lock/subsys /" para iniciar y rm -f/var/lock/subsys/"para detener las funciones en el script. Es posible que Stop no funcione para el primer reinicio ya que el bloqueo puede no estar disponible durante el apagado pero empezará a trabajar a partir del próximo reinicio

Enjoy .... :)

Satya

14

Sólo tiene que añadir la siguiente línea en la parte superior: # chkconfig: -. 99 10
debería hacer lo truco

+2

¿En la parte superior de dónde? – lonelyloner

Cuestiones relacionadas