Dernière exécution du script shell?

Je dois créer une sorte de sécurité intégrée dans l’un de mes scripts, pour éviter qu’il soit ré-exécuté immédiatement après un échec. Généralement, lorsqu’un script échoue, notre équipe d’assistance relance le script à l’aide d’un outil tiers. Ce qui est généralement correct, mais cela ne devrait pas arriver pour ce script particulier.

J’allais faire écho à un horodatage dans le journal, puis créer une condition pour voir si l’horodatage actuel est supérieur d’au moins deux heures à celui du journal. Si tel est le cas, le script se terminera. Je suis sûr que cette idée va marcher. Cependant, cela m’a rendu curieux de voir s’il y a un moyen de tirer la dernière exécution du script du système lui-même? Ou s’il existe une autre méthode pour éviter que le script soit immédiatement réexécuté.

Il s’agit d’un système SunOS Unix utilisant le Ksh Shell.

Il suffit de le faire, comme vous l’avez proposé, enregistrer la date >some file et le vérifier au début du script. Vous pouvez:

  • vérifier la dernière ligne (comme une chaîne de date elle-même)
  • ou la dernière heure de modification du fichier (par exemple lorsque la dernière commande de date a modifié le somefile

Une autre méthode courante est de créer un lock-file spécifié ou un lock-file pid-file tel que /var/run/script.pid . Son contenu est généralement le PID (et le nom d’hôte, si nécessaire) du processus qui l’a créé. Bien sûr, l’heure de modification du fichier vous indique quand il est créé, par son contenu, vous pouvez vérifier le PID en cours d’exécution. Si le PID n’existe pas (par exemple si le pré-processus est mort) et que l’heure de modification du fichier est plus ancienne que X minutes, vous pouvez redémarrer le script.

Cette méthode est bonne principalement parce que vous pouvez utiliser simplement le cron + some script_starter.sh qui vérifieront périodiquement le statut d’exécution du script et le redémarreront si nécessaire.

Si vous voulez utiliser des ressources système (et avoir un access root), vous pouvez utiliser accton + lastcomm .

Je ne connais pas SunOS mais je connais probablement ces programmes. L’ accton lance la comptabilisation à l’échelle du système de tous les programmes, (doit être root) et du nom de commande lastcomm command_name | tail -n 1 lastcomm command_name | tail -n 1 indique quand le command_name est exécuté la dernière fois.

Vérifiez l’ man lastcomm pour les commutateurs de ligne de commande.