Script de démarrage sur gutsy

Bonjour,

Je sollicite votre aide sur la création de script de démarrage avec la structure start|stop sur Gutsy.
Voila, j'ai un script, ci-après que j'ai nommé vmm
#!/bin/bash
VBoxManage startvm web &
exit


Je l'ai rendu exécutable
chmod 751 vmm


J'ai donc fait la copie dans /usr/bin
sudo cp vmm /usr/bin/


Jusque là ça va, je pense pour vous aussi d'ailleurs. Là où celui ci devient difficile c'est quand je pars de /etc/init.d/skeleton que j'ai copier et que j'ai nommé virtualbox
#! /bin/sh
### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO


# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="démarrage de machine virtuelle au départ d'une machine physique"
NAME= virtualbox
DAEMON=/usr/sbin/vmm.sh
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
 esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
 # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

:


En faisant simple, j'ai juste remplacé
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="démarrage de machine virtuelle au départ d'une machine physique"
NAME= virtualbox
DAEMON=/usr/sbin/vmm.sh
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0


Sauf que le fichier /var/run/virtalbox.pid n'existe pas
quand je fais
/etc/init.d/virtualbox start
ça marche
quand je fais
/etc/init.d/virtualbox stop
ça ne marche pas
message
/etc/init.d/virtualbox: 17: virtualbox: not found
start-stop-daemon: option `--name' requires an argument
Try `start-stop-daemon --help' for more information.


Je ne suis pas arrivé à me dépatouiller. Aidez-moi svp.
D'avance merci
Configuration: Linux
Firefox 2.0.0.11

5 réponses

  1. Modérateur
    Vu qu'apparemment le bug survient dans le stop il faudrait regarder la commande lancée par ton script dans do_stop() :
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME

    Pour cela le plus simple c'est de debugguer à coup de echo. Ajoute juste avant un :
    echo "start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME"
    Par ailleurs essaye de remplacer ligne 17 l'initialisation de NAME par :
    NAME="virtualbox"

    Normalement ta syntaxe est bonne mais bon...
    Essaye ausssi de t'inspirer des scripts déjà présents dans /etc/init.d basés sur ce squelette.

    Bonne chance
    0
    1. Bonjour,

      Me revoilà à nouveau. J'ai tout modifié. En fait, avec Virtualbox il y a 2 commandes "startvm" pour lancer "controlvm" pour éteindre
       VBoxManage startvm web
      VBoxManage controlvm web poweroff

      J'ai introduit ce code dans un script de manière à ne plus se soucier de lancer ou arrèter. Le script vérifie tout seul s'il faut allumer/éteindre.
      Voici le script:
      #!/bin/sh
      #
      #Vérification du répertoire de log perso
      #
      dossier=/home/ylan/.vlog/;
      if [ ! -d "$dossier" ]; then
              mkdir "$dossier";
      fi
      #
      #Création du fichier de log perso
      fichier=$dossier"web";
      #
      if [ ! -e "$fichier" ]; then
              echo 0 > $fichier;
      else
              n=$(cat $fichier);
      fi
      #
      #test si la machine est déjà allumée
      if [ $n -eq 0 ]; then
              {
              VBoxManage startvm web;
              echo 1 > $fichier;
              }
      else
              {
              VBoxManage controlvm web poweroff;
              echo 0 > $fichier;
              }
      fi
      exit
      


      Seulement voilà, si je voudrais le lancer automatiquement au démarrage, il ne se passe rien si je l'ajoute dans /etc/init.d. D'autant plus que le start|stop ne peut pas fonctionner puisque les deux commandes doivent lancer le même daemon. Comme c'est le daemon qui détermine s'il faut allumer ou éteindre.

      Quelqu'un peut-il m'aider
      0
      1. Modérateur
        https://www.andesi.org/forum_subdomain/index_php/

        update-rc.d permet apparemment de gérer tout ça..
        man update-rc.d

        Bonne chance
        0
        1. Grillé !
          J'ai fait ça en TP pour un script de firewall et on utilise bien update-rc pour déclarer le script. :)
          Ça va mettre ajour les liens vers des fichiers lancés à chaque démarrage/arrêt en fonction du niveau d'exécution.
          0
      2. Modérateur
        Donc c'est bon ton problème est résolu ?
        0