3 votes

Comment démarrer un script sans fin au démarrage

Je tente de lancer automatiquement un script interminable (qui ne renvoie pas 0 à la sortie) au démarrage de mon serveur ubuntu 12.04 headless sans interface graphique.

J'ai essayé @reboot nohup /home/luke/netup.sh & dans crontab et le script ne fonctionne pas correctement bien qu'il semble s'exécuter. J'ai essayé update-rc.d netup.sh defaults, le script a démarré mais n'a pas fonctionné correctement et la plupart des autres programmes censés démarrer automatiquement ne se sont pas lancés.

Le script tente de surveiller et d'enregistrer les pannes de connexion Internet et contient une boucle while-do. Il fonctionne lorsque je suis connecté au serveur et lancé manuellement.

Voici le script

#!/bin/bash
#
# Script pour surveiller le temps de disponibilité d'Internet

echo "Serveur démarré"  `date "+%F  %T"`  >> /home/luke/netup.log

START=0

while [ 1 ] ; do                    # boucle continue

#------------------------------------------------------------------------
/bin/ping -q 8.8.8.8 -c1 1>/dev/null 2>/dev/null # test de ping
PING=$?
#------------------------------------------------------------------------

if [ $PING = 0 ]; then              # ping réussi
    if [ $START -ne 0 ]; then       # était déconnecté
        END=$(date +%s)
        TIME=$(($END - $START))
        START=0
        let TIME=($TIME/60)     #convertir les secondes en minutes
        echo "Echec" $FAIL_TIME "pendant" $TIME "minutes" >> /home/luke/netup.log

    fi

else                        # échec du ping
    if [ $START -eq 0 ]; then       # était connecté
        START=$(date +%s)
        FAIL_TIME=$(date "+%F  %T")
    fi

fi

#------------------------------------------------------------------------
if [ $PING = 0 ]; then              # attendre

    sleep 60
else
    sleep 10
fi

done

0voto

Kristof Provost Points 323

Au lieu de configurer un script pour s'exécuter constamment au démarrage, pourquoi ne pas le changer pour s'exécuter à l'aide de cron? Comme vous lui dites de dormir pendant 60 secondes entre les exécutions de toute façon, utiliser cron pour exécuter un script sans boucle while une fois par minute aurait plus de sens et serait plus simple à gérer.

Vous pourriez également être intéressé par les réponses à cette question sur serverfault:

https://serverfault.com/questions/49082/can-i-run-a-cron-job-more-frequently-than-every-minute

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X