Qu'est-ce qui est nécessaire pour qu'un service Linux soit supporté par chkconfig?

36

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 je tente d'ajouter au démarrage automatique à l'heure de démarrage 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
Géo
la source
est votre service dans init.d /
Rungano

Réponses:

74

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

Katriel
la source
L'espace supplémentaire sur la deuxième ligne a été ajouté par markdown, ce n'est pas nécessaire
katriel
2
Voici quelques informations supplémentaires sur les niveaux d'exécution et d'autres choses. tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
Pred
Ce qui précède ne semble pas ajouter les scripts de suppression appropriés. J'ai besoin de chkconfig <service> --level 06 off pour obtenir explicitement les scripts de suppression.
user239558
4

Bien que katriel ait déjà répondu à cela avec le minimum nécessaire pour créer un script init, je pense que vous seriez également bien inspiré de regarder /etc/init.d/skeletonet d’utiliser cela comme modèle sur lequel baser votre script init. Vous vous retrouverez avec un script beaucoup plus cohérent et lisible.

Kamil Kisiel
la source
5
Théoriquement bon conseil, mais /etc/init.d/skeletonn'est pas présent sur les systèmes RHEL, uniquement sur Debian et les systèmes associés (Ubuntu, je pense).
Harlan
1

Il semble que le problème spécifique de Geo ait déjà été résolu, mais je suis tombé sur un message similaire en essayant de configurer une application Rails avec sidekiqun service géré. J'expliquerai ma solution ici au cas où cela aiderait un autre débutant comme moi.

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

Je avais besoin d'ajouter un nouveau script pour le sidekiqservice, alors je saisis le script à https://gist.github.com/CD1212/5326706 , modifié pour l' adapter à mes paramètres d'application, et l' avez sauvegardé à /etc/rc.d/init.d/sidekiq(appartenant à root comme tous les autres scripts là-bas).

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é bien! Un autre script avait le niveau de priorité d’arrêt 75, alors j’ai changé le mien à 76 et j’ai réessayé. Voici la tête de mon script d'initialisation:

#!/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 sidekiqn'a donné aucune plainte. Ensuite, lorsque j'ai exécuté la commande sudo chkconfig --list sidekiq, le service sidekiq a été affiché comme onpour les niveaux d' exécution appropriés.

Topher Hunt
la source
0

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

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

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

Chkconfig n'a pas eu de problème en ajoutant le service "it". Sinon, vous seriez limité à 100 services.

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

George Zamroz
la source