Script de démarrage sur gutsy

Fermé
ylanu Messages postés 42 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 9 mai 2008 - 10 janv. 2008 à 20:30
ylanu Messages postés 42 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 9 mai 2008 - 25 janv. 2008 à 10:31
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
A voir également:

5 réponses

mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
11 janv. 2008 à 12:00
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
ylanu Messages postés 42 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 9 mai 2008
24 janv. 2008 à 19:31
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
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
24 janv. 2008 à 20:45
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
EminoMeneko Messages postés 2435 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
24 janv. 2008 à 20:54
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
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
24 janv. 2008 à 20:58
Donc c'est bon ton problème est résolu ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ylanu Messages postés 42 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 9 mai 2008
25 janv. 2008 à 10:31
Je vous dirai ce soir
0