Je ne suis pas sûr qu'il existe une solution unique et robuste, donc vous pourriez finir par vous débrouiller tout seul.
Les fichiers de verrouillage sont imparfaits, mais moins que l'utilisation des pipelines 'ps | grep | grep -v'.
Cela dit, vous pourriez envisager de garder le contrôle du processus séparé de votre script - avoir un script de départ. Ou, au moins, le factoriser en fonctions tenues dans un fichier séparé, ainsi vous pourriez dans l'appelant script avoir :
. my_script_control.ksh
# Function exits if cannot start due to lockfile or prior running instance.
my_start_me_up lockfile_name;
trap "rm -f $lockfile_name; exit" 0 2 3 15
dans chaque script qui a besoin de la logique de contrôle. Le site piège s'assure que le fichier de verrouillage est supprimé lorsque l'appelant se retire, donc vous n'avez pas à coder ceci à chaque point de sortie dans le script.
L'utilisation d'un contrôle séparé script signifie que vous pouvez vérifier la sanité des cas limites : supprimer les fichiers journaux périmés, vérifier que le fichier de verrouillage est associé correctement à une instance en cours d'exécution du script, donner une option pour tuer le processus en cours d'exécution, et ainsi de suite. Cela signifie aussi que vous avez plus de chance d'utiliser grep sur ps
avec succès. Un ps-grep peut être utilisé pour vérifier qu'un fichier lock est associé à un processus en cours d'exécution. Vous pourriez peut-être nommer vos fichiers lock d'une manière ou d'une autre pour inclure des informations sur le processus : utilisateur, pid, etc., qui peuvent être utilisées par une invocation ultérieure de script pour décider si le processus qui a créé le fichier de verrouillage est toujours en activité. qui a créé le fichier de verrouillage est toujours là.