O que é necessário para um serviço linux ser suportado pelo chkconfig?

33

Eu estou tentando adicionar ao início automático no boottime um serviço linux através do

chkconfig -add <servicename> 

e recebo uma mensagem dizendo

service <servicename> does not support chkconfig

Estou usando o Red Hat Enterprise 4. O script que estou tentando adicionar ao início automático no boottime é o seguinte:

#!/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
    
por Geo 22.06.2009 / 17:07

4 respostas

71

O script deve ter duas linhas:

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

por exemplo:

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

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

Depois de adicionar os cabeçalhos acima, você pode executar chkconfig --add <service> .

    
por 22.06.2009 / 17:18
4

Embora katriel já tenha respondido isso com o mínimo necessário para criar um script de inicialização, acho que você também estaria bem atento ao olhar para /etc/init.d/skeleton e usar isso como um modelo no qual basear seu script de inicialização. Você terminará com um script muito mais consistente e legível.

    
por 23.06.2009 / 00:23
1

Parece que o problema específico do Geo já foi resolvido, mas encontrei uma mensagem semelhante ao tentar configurar um aplicativo do Rails com sidekiq como um serviço gerenciado. Vou explicar a minha solução aqui, caso isso ajude qualquer novato como eu.

Estou trabalhando em uma instalação do CentOS, e o chkconfig já está configurado com vários outros serviços como httpd, mysql e redis. Observe que a maioria dos serviços só precisa ser ativada em runlevels 3 a 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...)

Eu precisava adicionar um novo script para o serviço sidekiq , então peguei o script no link , modificado para ajustar os parâmetros do meu aplicativo e salvá-lo em /etc/rc.d/init.d/sidekiq (de propriedade do root, como todos os outros scripts).

No entanto, quando tentei registrar este novo serviço, recebi o erro chkconfig:

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

Depois de alguma leitura extra Descobri que os números de prioridade definidos na parte superior de cada script chkconfig devem ser exclusivos. Uma mensagem de erro mais clara teria sido legal! Outro script tinha o nível de prioridade de desligamento 75, então mudei o meu para 76 e tentei novamente. Aqui está a cabeça do meu script de inicialização:

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

Desta vez, sudo chkconfig --add sidekiq não deu nenhuma reclamação. Então, quando eu executei sudo chkconfig --list sidekiq , o serviço sidekiq foi mostrado como on para os níveis de execução apropriados.

    
por 09.03.2015 / 16:55
0

Os números de prioridade não precisam ser exclusivos. Eles representam apenas uma ordem de serviços.

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 root root 12 Sep 16 12:36 /etc/rc.d/rc3.d/S99it -> ../init.d/it

O Chkconfig não teve problemas para adicionar o serviço "it". Caso contrário, você estaria limitado a 100 serviços.

Também no meu exemplo, ele seria executado antes do oracle porque os scripts são executados em ordem alfabética.

    
por 16.09.2016 / 04:42