#1 Le 31/01/2013, à 18:36
- tmp6235
script init.d : lancement manuel OK, lancement automatique -> erreur
Bonjour à tous,
sur mon système, on trouve le fichier /etc/init.d/mkrssh construit sur la base de /etc/init.d/skeleton fourni avec notre distribution préférée (vous trouverez le code au bas de ce message). Les liens symboliques ont été créés dans les dossiers /etc/rc*.d/ avec la commande <sudo update-rc mkrssh defaults>.
Si je démarre manuellement mon daemon <sudo service mkrssh start> tout se passe comme prévu, le tunnel ssh est créé et tout comme il faut. En revanche, au démarrage de ma machine (AnOtherCastel), le script est bien exécuté mais la création du tunnel échoue. Pour preuve, le contenu du dossier log :
Peach@AnOtherCastel:~$ cat /var/log/mkrssh
[2013-01-31 17:14:15]Test daemon start-up command... [OK]
[2013-01-31 17:14:15]Start daemon...
[2013-01-31 17:15:40]Test daemon start-up command... [OK]
[2013-01-31 17:15:40]Start daemon... [OK]
On voit que la tentative automatique à 17h14 a échoué (pas de [OK] à la seconde ligne) ; en revanche la tentative manuelle à 17h15 a réussi.
Avez-vous une piste quant à la résolution de mon problème ? D'autre tests à effectuer ?
Bien cordialement,
Mario & Peach
P.S. : le script mkrssh
Peach@AnOtherCastel:~$ cat /etc/init.d/mkrssh
#! /bin/sh
### BEGIN INIT INFO
# Provides: mkrssh
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Create an ssh reverse tunnel from Mario@ThisCastel on port 12345
### END INIT INFO
# Author: Mario & Peach
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="ssh reverse tunnel from Mario@ThisCastel on port 12345"
NAME=mkrssh
DAEMON=/usr/bin/ssh
DAEMON_ARGS="-i /root/.ssh/id_rsa -R 12345:localhost:22 Mario@ThisCastel -fN"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
LOG=/var/log/$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
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /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
echo "" >> $LOG
echo -n "[`date +'%F %T'`]Test daemon start-up command..." >> $LOG
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --exec $DAEMON --test > /dev/null \
|| return 1
echo "\t[OK]" >> $LOG
echo -n "[`date +'%F %T'`]Start daemon..." >> $LOG
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
echo "\t\t\t[OK]" >> $LOG
# 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
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
#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|status|restart|force-reload}" >&2
exit 3
;;
esac
Dernière modification par tmp6235 (Le 31/01/2013, à 18:37)
Hors ligne
#2 Le 31/01/2013, à 18:43
- nesthib
Re : script init.d : lancement manuel OK, lancement automatique -> erreur
Es-tu sûr que ta connexion réseau est fonctionnelle au moment où est lancé le script ?
Je te propose une méthode alternative pour la mise en place d'un tel tunnel :
#!/bin/bash
if ps -ef | egrep '[s]sh -R.*Mario@ThisCastle'
then
echo "ok"
else
nohup ssh -R… Mario@ThisCastle &
fi
À mettre par exemple en cron toutes les 10 min.
Le script va vérifier si le tunnel est en place, et si ce n'est pas le cas le démarrer.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 31/01/2013, à 18:57
- tmp6235
Re : script init.d : lancement manuel OK, lancement automatique -> erreur
Es-tu sûr que ta connexion réseau est fonctionnelle au moment où est lancé le script ?
Absolument pas. Et je n'ai aucune connaissance du processus de mise en état des cartes réseaux ; alors je ne sais même pas comment vérifier.
Je te propose une méthode alternative pour la mise en place d'un tel tunnel :[...]
Les choses simples sont souvent les meilleures ; mais ici je trouve ça un peu brouillon . Mais effectivement, je vais me rabattre dessus si j'ai pas d'idée avant la fin de la semaine. Merci à toi.
Dernière modification par tmp6235 (Le 31/01/2013, à 18:58)
Hors ligne
#4 Le 31/01/2013, à 20:00
- compte supprimé
Re : script init.d : lancement manuel OK, lancement automatique -> erreur
si tu es sous ubuntu, c'est upstart qui gère , regarde le man d'upstart et fait un fichier /etc/init/mkrssh.conf du type :
# mkrssh-my script description
#
# Make sure we start after network is running
start on (running network-interface
or running network-manager
or running networking)
stop on runlevel [!023456]
enfin essaye d'adapter ..., je peux pas tester j'ai n'ai pas upstart , juste des vieux souvenirs !!
reedit : fais gaffe à la dernière ligne si tu veux l'arrêter ...
Dernière modification par sogyam (Le 31/01/2013, à 22:26)
#5 Le 04/02/2013, à 13:29
- compte supprimé
Re : script init.d : lancement manuel OK, lancement automatique -> erreur
j'ai dit une connerie ce serait plus :
# mkrssh-my script description
#
# Make sure we start after network is running
start on (started network-interface
or started network-manager
or started networking)
stop on runlevel [023456]
un ubuntero pourrait me dire si cela fonctionne , au cas ou ?