Journal Slackware :: petit script d'admin et plus

Posté par  .
Étiquettes :
0
25
nov.
2004
Bonjour,

J'ai rédigé il y a quelques temps déjà, un petit script permettant de gérer les services sous Slackware, à savoir démarrer/arreter/redémarrer un service comme httpd ou mysqld, et pouvoir gérer quels services doivent être lancés au démarrage de la machine. Ce petit script bash fonctionne, mais je pense qu'il est perfectible et le soumet afin de l'améliorer et d'en faire profiter tout le monde.

Voici quelques exemples de son usage :

service httpd start : démarre apache
service httpd +start : démarre apache et active son lancement au démarrage du système
service httpd -stop : arrete apache et désactive son lancement au démarrage du système

Voici le script :

#! /bin/sh
# /sbin/service
# Manage System services

service=$1
act=$2
export service act

activate () {
echo $service is now started at boot time
chmod 755 /etc/rc.d/rc.$service
}

inactivate () {
echo $service is now disable at boot time
chmod 222 /etc/rc.d/rc.$service
}

test_active () {
if [ `echo $act | grep "-" | wc -c` -gt 0 ]
then
inactivate
fi
if [ `echo $act | grep "+" | wc -c` -gt 0 ]
then
activate
fi

}

start (){
echo 'starting' $service '...'
chmod 755 /etc/rc.d/rc.$service
sh /etc/rc.d/rc.$service start
test_active
}

stop (){
echo 'stopping' $service '...'
chmod 755 /etc/rc.d/rc.$service
sh /etc/rc.d/rc.$service stop
test_active
}

list_active () {
echo 'active services :'
ls -l /etc/rc.d/* | grep rwxr-xr-x
}

list_inactive () {
echo 'inactive services :'
ls -l /etc/rc.d/* | grep -v rwxr-xr-x
}

list_all () {
if [ `echo $service | wc -c` -gt 1 ]
then
if [ `ls -l /etc/rc.d/rc.$service | grep rwxr-xr-x | wc -c` -gt 1 ]
then
echo $service 'is active'
else
echo $service 'is not active'
fi
else
list_inactive
list_active
fi
}

apply () {
case "$act" in
*'start')
start
;;
*'stop')
stop
;;
*'restart')
stop
start
;;
*)
list_all
esac
}

usage () {
echo 'usage : '
echo ' service ['service'|active|inactive|?] [+|-][start|stop|restart]'
echo ''
echo ' where 'service' can be the name of a service'
echo ''
echo ' active : list all actives services on boot'
echo ' inactive : list all inactives services on boot'
echo ' ? : display this help information'
echo ' + : after stopping/starting a service, activate it for auto start at boot time'
echo ' - : after stopping/starting a service, unactivate its auto start at boot time'
echo ' start : start a service'
echo ' stop : stop a service'
echo ' restart : restart a service'
echo ''
echo ' with just a service name, the command prints if the service is active at boot time or not.'
echo ' without any argument, the command prints the list of all inactive and actives services.'
}

case "$1" in
'active')
list_active
;;
'inactive')
list_inactive
;;
'?')
usage
;;
*)
apply
esac


exit 0


Voilà, j'espére que vous n'hésiterez pas à y apporter vos améliorations.

Bonne journée.
  • # déjà existant

    Posté par  . Évalué à 1.

    Bonjour.

    Je ne connais pas slackware comme distribution, mais d'autre outils existent déjà pour faire ce travail.

    Personnellement, j'utilise sysv-rc-conf sur Debian pour configurer le lancement des services et je fais /etc/init.d/$service (start|stop) pour démarrer ou arrêter un service.

    Je n'ai pas encore ressenti le besoin d'écrire un script pour automatiser ces deux tâches, mais sinon, on peut améliorer un petit peu ce qui est présenté ici.

    À première vue :
    - protéger les variables par des "
    - utiliser test -(r|w|x) au lieu de ls -l | grep pour connaître les droits sur les fichiers
    - remplacer la suite d'echo par un cat <<FIN
    - gestion de code retour en cas d'échec

    Bonne continuation.
    • [^] # Re: déjà existant

      Posté par  . Évalué à 4.


      Je ne connais pas slackware comme distribution, mais d'autre outils existent déjà pour faire ce travail.

      Personnellement, j'utilise sysv-rc-conf sur Debian pour configurer le lancement des services et je fais /etc/init.d/$service (start|stop) pour démarrer ou arrêter un service.


      Oui bin ca tombe bien , la ca parle de slackware qui est une distro avec un systeme init assez particulier.

      pfff..
      • [^] # Re: déjà existant

        Posté par  . Évalué à -4.

        particulier ? c'est l'init bsd ...
        • [^] # Re: déjà existant

          Posté par  . Évalué à 3.

          Et ? Ai-je dit le contraire ?? il est particulier dans le sens ou les autres distro utilisent sysV.
      • [^] # Re: déjà existant

        Posté par  . Évalué à 0.

        Citer sysv-rc-conf a pour but ici de montrer qu'un front-end existe pour sysv, et que quelque chose de similaire doit exister pour l'init bsd.

        Ne connaissant pas d'interface pour slackware, j'invite seulement à chercher un équivalent de sysv-rc-conf.

        Avant de créer quelque chose, je regarde souvent si cela n'existe pas déjà, histoire de gagner du temps et de ne pas réinventer la roue.
        Pas vous ?
  • # --

    Posté par  (Mastodon) . Évalué à 4.

    j'avoue que je n'ai pas compris l'interêt.

    Par exemple pour apache, si tu veux démarrer/stopper ton service, tu utilises bêtement apachectl. Si tu veux qu'il se lance au démarrage, tu n'as qu'à rendre executable le script rc.apache ou rc.httpd (je ne me rappelle plus) qui est dans /etc/rc.d . A quoi sert de rajouter une couche en plus (ton script dans ce cas) ?
    • [^] # Re: --

      Posté par  . Évalué à 4.

      Oups pardon, je n'avais pas tout détaillé...

      L'autre interet est de pouvoir lister les services lancés au démarrage et de les rendre actif/inactif au démarrage de la machine.

      par exemple :

      root@pcad:~# service active
      active services :
      -rwxr-xr-x 1 root root 893 Jan 29 2003 /etc/rc.d/rc.4
      -rwxr-xr-x 1 root root 4782 Sep 12 2003 /etc/rc.d/rc.6
      -rwxr-xr-x 1 root root 2013 Feb 27 2003 /etc/rc.d/rc.K
      -rwxr-xr-x 1 root root 7634 Sep 15 2003 /etc/rc.d/rc.M
      -rwxr-xr-x 1 root root 8312 Aug 28 2003 /etc/rc.d/rc.S
      -rwxr-xr-x 1 root root 3949 Aug 26 2003 /etc/rc.d/rc.cups
      -rwxr-xr-x 1 root root 136 Jun 3 13:09 /etc/rc.d/rc.font
      -rwxr-xr-x 1 root root 401 Mar 5 2003 /etc/rc.d/rc.httpd
      -rwxr-xr-x 1 root root 4038 Sep 21 2003 /etc/rc.d/rc.inet1
      -rwxr-xr-x 1 root root 4419 Sep 21 2003 /etc/rc.d/rc.inet2
      -rwxr-xr-x 1 root root 497 Sep 12 2003 /etc/rc.d/rc.inetd
      -rwxr-xr-x 1 root root 147 Jun 3 11:59 /etc/rc.d/rc.keymap
      -rwxr-xr-x 1 root root 113 Oct 3 1995 /etc/rc.d/rc.local
      -rwxr-xr-x 1 root root 25550 Jun 4 17:33 /etc/rc.d/rc.modules
      -rwxr-xr-x 1 root root 2259 May 20 2004 /etc/rc.d/rc.mysqld
      -rwxr-xr-x 1 root root 126 Jun 3 13:04 /etc/rc.d/rc.netdevice
      -rwxr-xr-x 1 root root 728 Apr 7 2003 /etc/rc.d/rc.samba
      -rwxr-xr-x 1 root root 861 May 29 2002 /etc/rc.d/rc.syslog
      -rwxr-xr-x 1 root root 1740 Sep 11 1999 /etc/rc.d/rc.sysvinit

      Et par exemple, je décides de ne plus lancer le démon mysql au démarrage du PC :

      root@pcad:~# service mysqld -stop
      stopping mysqld ...
      mysqld is now disable at boot time

      certes, ls et chmod font très bien l'affaire, mais bon, hein, fallait bien une bonne raison de faire chauffer vim ;)
      • [^] # Re: --

        Posté par  (Mastodon) . Évalué à 4.

        disons que pour un admin uniquement slackware, je n'en vois pas bcp l'interêt. Par contre j'imagine mieux à quoi cela servirait si on installait un script équivalent pour chacune des distribs (mais adapté) en gardant la même syntaxe à l'utilisation. La ce serait utile pour l'admin qui gère plusieurs types de distribs/OSes mais qui réutilise les mêmes commandes pour tous.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.