Un petit coup d'pouce pour programmer un script CRON, please

Hello,

Sur mon serveur Debian 4 j’ai un processus qui se lance grace à ce script enregistré dans init.d:


#!/bin/sh
### BEGIN INIT INFO
# Provides:          fuppesd
# 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: UPnP Media Server
# Description:       Fuppes UPnP media server.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DESC="UPnP Media Server"
NAME=fuppesd
DAEMON=`which $NAME`
DAEMON_ARGS="--config-dir /etc/fuppes/ --database-file /etc/fuppes/fuppes.db --log-level 1"
SCRIPTNAME=/etc/init.d/$NAME
FUPPES_USER=fuppes
FUPPES_GROUP=fuppes

# Exit if the package is not installed
if [ ! -x "$DAEMON" ]; then
{
        echo "Couldn't find $DAEMON"
        exit 99
}
fi

# 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 --chuid $FUPPES_USER:$FUPPES_GROUP --exec $DAEMON --test > /dev/null \
		|| return 1
	start-stop-daemon --start --quiet --chuid $FUPPES_USER:$FUPPES_GROUP --exec $DAEMON -- $DAEMON_ARGS \
		|| return 2
}

#
# 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 --signal 2 --retry 5 --quiet --name $NAME
	RETVAL="$?"
	[ "$RETVAL" = 2 ] && return 2
	return "$RETVAL"
}

case "$1" in
  start)
	log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) log_end_msg 0 ;;
		2) log_end_msg 1 ;;
	esac
	;;
  stop)
	log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) log_end_msg 0 ;;
		2) log_end_msg 1 ;;
	esac
	;;
  restart|force-reload)
	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|force-reload}" >&2
	exit 3
	;;
esac

:

Mon problème c’est que pour une raison qui m’est totalement inconnue (d’ailleur au passage si quelqu’un peu m’aider sur ce point je suis preneur) le processus se coupe tout seul au bout d’un temps indéterminé.

A défaut de trouver ce qui cause l’arret du-dit processus, je me dis que je pourrais tout simplement programmer une tache CRON qui verifierait si le processsus est lancé et si ce n’est pas le cas, le relancer… genre toutes les 60min par ex.

Seulement voilà, moi être pas mal rouillé en terme de programmation, et je n’ai jamais touché à tout ce qui est de scripts sh sous nunuxe. Pour l’instant je me contentais de copier ce que je trouvais ici et là.

Est-ce que quelqu’un pourrait me filer un coup de pouce pour faire ça?

Merci :jap:

Si tu n’es pas allergiaue au pyton je peux te le faire en python.
En bash bof je n’ai jamais vraiment reussi a retenir toutes les syntaxes de biiip de bash/tcsh…

Bah j’suis allergique à rien … tout ce que je veux c’est que ça fasse ce que je demande et que ça marche :ane:

Bon comment on peut savoir s’il tourne ou pas?

On cherche quoi dans le résultat d’un ps aux ?
On peut tester le résultat d’une commande ?

groups.google.com…
Je pense aussi que l’on peut faire plus propre mais là comme ça je ne sais plus.
Edité le 31/07/2008 à 23:51

une tâche cron de ce style : psgrep “process” || /etc/init.d/… restart

(|| = si non)

ah ben voilà un truc tout c#n comme je l’esperait bien :ane:
Je vais essayer ça :jap:

Okay j’ai du adapter un peu l’machin mais ça marche :jap:

Voilà ce que j’utilise:


ps -A | grep "fuppesd" || /etc/init.d/Fuppesd restart 

psgrep = inconnu au bataillon pour mon Debian :ane:

Merci !
Edité le 01/08/2008 à 08:55

“(|| = si non)” : dans tous les langages civilisés, c’est une sorte de “ou logique”.
Comment voulez vous que mon neurone retienne de telles syntaxes ??

erreur, c’etait pgrep

fakbill : || = ou, && = et
c’est pas trop sorcier à retenir quand même :slight_smile:

oui oui ca ca va :slight_smile:

Par contre, ce sont des choses comme :(){ :|:& };: qui ne font dire que la syntaxe de bash est peu lissible.
ne pas essayer cette ligne de commande. surtout pas : en.wikipedia.org…

Bref, à partir du moment où je veux faire un test un peu compliqué ou une boucle, je trouve python tellement plus simple et plus lisible.
Je ne suis pas puriste, je veux juste écrire des scripts que tout le monde peut relire.
Mes scripts python sont donc pleins de os.system (quand je me fiche que se soit vraiment portable) mais aussi plein de try pour gérer les erreurs et de boucles “à la python”. Des tests montent que “tout le monde” comprend tout de suite ce que le script fait.

idem mais je suis plutot du cote de perl car ca permet de scripter directement sans fatalement devoir declarer des objets et des machins.
mais a part ca, je suis comme toi, des que ca commence a etre un peu complexe, je lache tres vite bash…

KP2
Heu… avec Python tu n’est pas obligé de déclarer plein d’objets et de machins. Python peut etre d’une simplicité enfantine, et plus lisible que Perl bien qu’il paraisse que Dieu ai codé l’univers en Perl.

Le Poilu

Rien que comme ça… Si ton process est mort, un simple start suffit non ? :wink: (détail, détail :smiley: )

Pour son arrêt, t’a rien dans les logs ?

Un pitit troll python/perl un :wink: