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