Un script qui s’auto-execute en bash

Article mise à jour le: 17 décembre 2012

Il existe plusieurs manière pour qu’un script s’auto-execute automatiquement. Voici quelques lignes de code qui vous permettront de lancer perpetuellement un script

Admettons que vous ayez développé  un script qui vienne régulièrement à planter (problème de mémoire de php par exemple) ou que pour une raison x ou y vous souhaitiez pouvoir le relancer automatiquement sans avoir à faire cette opération manuellement.

Il existe plusieurs façons de faire cela en bash, en shell linux. Vous pouvez par exemple demander à un script de contrôle de conditionner l’exécution du script à l’existence ou non d’un fichier. Une autre méthode est celle décrite ci dessous, voici son fonctionnement dans les grandes lignes. Pour le détail, la méthode rtfm se révélera pratique, linux est un outil vraiment formidable si on sait un peu s’en servir.

Elle  demande de vérifier si 1=1 (donc toujours), la liste des tâches en cours sur votre serveur. Si l’output de cette vérification est égale à 0 (donc qu’il retourne quelque chose), cela veut dire que votre script est en train de tourner et retournera donc la ligne « le script est actuellement en train de tourner ».

Dans la 2 ème condition, vous pourrez lui indiquer le script à exécuter. Le script fera une pause d’une minute avant de recommencer la vérification. Je précise pour les puristes que je ne suis pas un codeur, que je n’ai pas de formation en code, que je bricole simplement parfois aidé pour me faire gagner du temps donc si vous trouvez une façon de l’améliorer, fine, vous pouvez mettre ajouter quelques lignes au sujet de ce script avec vos idées.

N’oubliez pas d’exécuter cette commande dans un screen  de telle sorte que si vous tuez votre session linux, la commande continue à s’exécuter en tâche de fond. Dernier conseil, si vous effectuez des opérations sur une base de données dans votre script principal, pensez à vérifier la taille de celle-ci par moment afin d’éviter de vous retrouver avec une base rapidement saturée…. ;)

 
#!/bin/bash
while [ 1 = 1 ]
do
process=nom_de_votre_fichier

ps ax | grep $process | grep -v grep

if [[ $? -eq 0 ]];
then
echo "le script est actuellement en train de tourner"
else

[lancez ici votre script]
fi
sleep 60
done

Le coin des achats professionnels