web-dev-qa-db-fra.com

Que faut-il pour qu'un service linux soit pris en charge par chkconfig?

J'essaie d'ajouter au démarrage automatique à boottime un service Linux via le

chkconfig -add <servicename> 

et je reçois un message disant

service <servicename> does not support chkconfig

J'utilise Red Hat Enterprise 4. Le script que j'essaye d'ajouter au démarrage automatique à boottime est le suivant:

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

Le script doit avoir 2 lignes:

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

par exemple:

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

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

Après avoir ajouté les en-têtes ci-dessus, vous pouvez exécuter chkconfig --add <service>.

73
katriel

Bien que katriel ait déjà répondu à cela avec le strict minimum nécessaire pour créer un script d'initialisation, je pense que vous seriez également bien servi en regardant /etc/init.d/skeleton et en l'utilisant comme modèle sur lequel baser votre script d'initialisation. Vous vous retrouverez avec un script beaucoup plus cohérent et lisible.

4
Kamil Kisiel

Il semble que le problème spécifique de Geo ait déjà été résolu, mais j'ai rencontré un message similaire en essayant de configurer une application Rails avec sidekiq en tant que service géré. Je vais expliquer ma solution ici au cas où cela aiderait d'autres débutants comme moi.

Je travaille sur une installation CentOS, et chkconfig est déjà configuré avec plusieurs autres services comme httpd, mysql et redis. Notez que la plupart des services ne doivent être activés que sur les niveaux d'exécution 3 par 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...)

J'avais besoin d'ajouter un nouveau script pour le service sidekiq, j'ai donc saisi le script sur https://Gist.github.com/CD1212/5326706 , l'ai modifié pour l'adapter à celui de mon application. paramètres, et enregistré à /etc/rc.d/init.d/sidekiq (appartenant à root comme tous les autres scripts).

Cependant, lorsque j'ai essayé d'enregistrer ce nouveau service, j'ai eu l'erreur chkconfig:

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

Après quelques lectures supplémentaires j'ai découvert que les numéros de priorité définis en haut de chaque script chkconfig doivent être uniques. Un message d'erreur plus clair aurait été sympa! Un autre script avait le niveau de priorité d'arrêt 75, j'ai donc changé le mien en 76 et j'ai réessayé. Voici la tête de mon 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.
#

Cette fois, Sudo chkconfig --add sidekiq n'a formulé aucune plainte. Puis quand j'ai couru Sudo chkconfig --list sidekiq, le service sidekiq a été affiché sous la forme on pour les niveaux d'exécution appropriés.

1
Topher Hunt

Les numéros de priorité n'ont pas besoin d'être uniques. Ils ne représentent qu'un ordre de services.

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

Chkconfig n'a rencontré aucun problème lors de l'ajout du service "it". Sinon, vous seriez limité à 100 services.

Dans mon exemple également, il s'exécuterait avant Oracle car les scripts sont exécutés par ordre alphabétique.

0
George Zamroz