Cosa è necessario affinché un servizio linux sia supportato da chkconfig?


36

Sto provando ad aggiungere all'avvio automatico all'avvio un servizio Linux tramite

chkconfig -add <servicename> 

e ricevo un messaggio che dice

service <servicename> does not support chkconfig

Sto usando Red Hat Enterprise 4. Lo script che sto tentando di aggiungere all'avvio automatico è il seguente:

#!/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

è il tuo servizio in init.d /
Rungano il

Risposte:


74

Lo script deve avere 2 righe:

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

per esempio:

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

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

Dopo aver aggiunto le intestazioni sopra puoi eseguire chkconfig --add <service>.


Lo spazio extra sulla seconda riga è stato aggiunto da markdown, non è necessario
Katriel,

2
Ecco alcune ulteriori informazioni sui livelli di esecuzione e altre cose. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred

Quanto sopra non sembra tuttavia aggiungere gli script di uccisione appropriati. Ho bisogno di chkconfig <service> --level 06 off per ottenere esplicitamente gli script kill.
user239558

4

Mentre katriel ha già risposto a questo con il minimo indispensabile per creare uno script init, penso che saresti anche ben servito a guardarlo /etc/init.d/skeletone usarlo come modello su cui basare il tuo script init. Ti ritroverai con uno script molto più coerente e leggibile.


5
Teoricamente un buon consiglio, ma /etc/init.d/skeletonnon è presente sui sistemi RHEL, solo su Debian e relativi (Ubuntu, penso).
Harlan,

1

Sembra che il problema specifico di Geo sia già stato risolto, ma mi sono imbattuto in un messaggio simile durante il tentativo di configurare un'app Rails sidekiqcome servizio gestito. Spiegherò la mia soluzione qui nel caso in cui aiuti altri principianti come me.

Sto lavorando su un'installazione CentOS e chkconfig è già configurato con molti altri servizi come httpd, mysql e redis. Nota che la maggior parte dei servizi devono essere abilitate solo sui runlevel 3attraverso 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...)

Avevo bisogno di aggiungere un nuovo script per il sidekiqservizio, quindi ho preso lo script su https://gist.github.com/CD1212/5326706 , modificato per adattarlo ai parametri della mia app e salvato in /etc/rc.d/init.d/sidekiq(di proprietà di root come tutti i altri script lì).

Tuttavia, quando ho provato a registrare questo nuovo servizio, ho ricevuto l'errore chkconfig:

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

Dopo alcune letture extra ho scoperto che i numeri di priorità definiti nella parte superiore di ogni script chkconfig devono essere univoci. Un messaggio di errore più chiaro sarebbe stato bello! Un altro script ha chiuso il livello di priorità 75, quindi ho cambiato il mio in 76 e ho riprovato. Ecco il capo del mio script init:

#!/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.
#

Questa volta, sudo chkconfig --add sidekiqnon ha dato alcun reclamo. Quindi, quando ho eseguito sudo chkconfig --list sidekiq, il servizio sidekiq è stato mostrato come onper i runlevel appropriati.


0

I numeri di priorità non devono essere univoci. Rappresentano solo un ordine di servizi.

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

ls -l /etc/rc.d/rc3.d/*it
lrwxrwxrwx 1 root root 12 set 16 12:36 /etc/rc.d/rc3.d/S99it -> ../init.d/it

Chkconfig non ha avuto problemi ad aggiungere il servizio "it". Altrimenti si sarebbe limitati a 100 servizi.

Anche nel mio esempio, verrebbe eseguito prima dell'oracolo perché gli script sono eseguiti in ordine alfabetico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.