O que é necessário para que um serviço Linux seja suportado pelo chkconfig?

36

Estou tentando adicionar ao início automático no horário de início 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 à inicialização automática em tempo de inicialização é 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
Geo
fonte
é o seu serviço em init.d /
Rungano

Respostas:

74

O script deve ter 2 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>.

katriel
fonte
O espaço extra na segunda linha foi adicionado por remarcação, não é necessário
Katriel
2
Aqui estão mais algumas informações sobre os níveis de execução e outras coisas. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred
O texto acima parece não adicionar os scripts de interrupção adequados. Eu preciso do chkconfig <service> --level 06 off para obter explicitamente os scripts de interrupção.
user239558
4

Embora o katriel já tenha respondido a isso com o mínimo necessário para criar um script init, acho que você também ficaria bem vendo /etc/init.d/skeletone usando isso como um modelo no qual basear seu script init. Você terminará com um script muito mais consistente e legível.

Kamil Kisiel
fonte
5
Teoricamente bom conselho, mas /etc/init.d/skeletonnão está presente nos sistemas RHEL, apenas no Debian e afins (Ubuntu, eu acho).
Harlan
1

Parece que o problema específico do Geo já foi resolvido, mas recebi uma mensagem semelhante ao tentar configurar um aplicativo Rails sidekiqcomo um serviço gerenciado. Vou explicar minha solução aqui, caso isso ajude outros novatos 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. Note-se que a maioria dos serviços só precisa ser ativado em níveis de execução 3atravé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...)

Eu precisava adicionar um novo script para o sidekiqserviço, então peguei o script em https://gist.github.com/CD1212/5326706 , modifiquei-o para ajustar os parâmetros do meu aplicativo e salvei-o em /etc/rc.d/init.d/sidekiq(de propriedade da raiz, como todos os outros scripts lá).

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

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

Após algumas leituras extras , descobri que os números de prioridade definidos na parte superior de cada script chkconfig devem ser únicos. Uma mensagem de erro mais clara teria sido legal! Outro script tinha o nível de prioridade 75 de desligamento, então mudei o meu para 76 e tentei novamente. Aqui está a cabeça do meu 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.
#

Desta vez, sudo chkconfig --add sidekiqnão deu queixa. Então, quando eu executei sudo chkconfig --list sidekiq, o serviço sidekiq foi mostrado como onnos níveis de execução apropriados.

Topher Hunt
fonte
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 raiz raiz 16 Sep 16 12:28 /etc/rc.d/rc3.d/S99oracle -> ../init.d/oracle

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

O Chkconfig não apresentou problemas ao 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.

George Zamroz
fonte