J'ai un script de sauvegarde tar
qui s'exécute une fois par mois. Il passe la nuit à travers cron
. J'ai également un programme d'alimentation qui redémarre le serveur à 4.15 heures tous les soirs.
Le problème est que le serveur redémarre lorsque le script tar
est en cours d'exécution.
Puis-je ajouter quelque chose au début et à la fin d'un script bash pour désactiver un redémarrage alors que le script est actif?
Il y a une discussion sur la façon d'implémenter un verrou mutex dans la FAQ Bash ici:
http://mywiki.wooledge.org/BashFAQ/045
Vous pouvez implémenter quelque chose de similaire, mais faites votre boucle de script de redémarrage jusqu'à ce que le verrou soit libre. Je n'ai pas testé ce qui suit, mais voici un point de départ:
Script Tar:
#!/bin/bash
lockdir=/tmp/myscript.lock
if mkdir "$lockdir"
then # directory did not exist, but was created successfully
echo >&2 "successfully acquired lock: $lockdir"
trap 'rm -rf "$lockdir"' 0 # remove directory when script finishes
# continue script
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
exit 0
fi
# DO YOUR ORIGINAL TAR SCRIPT HERE
Script de redémarrage:
#!/bin/bash
lockdir=/tmp/myscript.lock
while true; do
if mkdir "$lockdir"
then # directory did not exist, but was created successfully
trap 'rm -rf "$lockdir"' 0 # remove directory when script finishes
break # continue with script
else
sleep 5 # sleep for 5 seconds and try again
fi
done
# RUN YOUR REBOOT COMMANDS HERE
J'utiliserais la technique d'interrogation pour le pid de ce script. L'idée de base est d'attendre que le script publie le PID (c'est-à-dire qu'il s'est terminé), puis seulement à l'étape suivante du script de redémarrage. Et bien sûr, si aucun processus n'est en cours d'exécution, le script se réinitialisera.
#!/bin/bash
while pgrep -f my_backup_script_name.sh > /dev/null
do
sleep 0.25 # small delay so that the loop doesn't hog the CPU
done
shutdown -r now