Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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

nesthib a écrit :

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.

nesthib a écrit :

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