sviluppo-web-qa.it

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

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
35
Geo

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>.

73
katriel

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

4
Kamil Kisiel

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 con sidekiq come servizio gestito. spiega la mia soluzione qui nel caso in cui aiuti qualsiasi altro neofita 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 deve essere abilitata solo sui runlevel 3 attraverso 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 servizio sidekiq, quindi ho preso lo script su https://Gist.github.com/CD1212/5326706 , l'ho modificato per adattarlo a quello della mia app parametri e salvato in /etc/rc.d/init.d/sidekiq (di proprietà di root come tutti gli 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 qualche lettura 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 sidekiq non ha presentato reclami. Quindi quando ho eseguito Sudo chkconfig --list sidekiq, il servizio sidekiq è stato mostrato come on per i runlevel appropriati.

1
Topher Hunt

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 radice radice 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 di Oracle perché gli script vengono eseguiti in ordine alfabetico.

0
George Zamroz