J'ai un démon qui, lorsqu'il est démarré, charge ses données depuis un répertoire qui se trouve être un lien symbolique. Périodiquement, de nouvelles données sont générées et le lien symbolique mis à jour. Je veux un script bash qui vérifiera si le lien symbolique actuel est le même que l'ancien (avec lequel le démon a démarré) et si ce n'est pas le cas, redémarrez le démon. Ma pensée actuelle est:Vérifie si un lien symbolique a changé
if [[ ! -e $old_dir || $(readlink "$data_dir") == $(readlink "$old_dir") ]];
then
echo restart
...
ln "$(readlink "$data_dir")" "$old_dir" -sf
else
echo no restart
fi
L'exigence abstraite est: chaque fois que le script est exécuté, il doit vérifier si un lien symbolique sur un chemin donné pointe maintenant à une autre chose que ce fut la dernière fois, et si oui faire quelque chose. (L'alternative serait de vérifier si les données sur le chemin a changé, mais je ne vois pas que tout être plus propre.) Mes questions:
- Est-ce une bonne approche?
- Quelqu'un a-t-il une meilleure idée?
- Que dois-je utiliser pour
$old_dir
, où dois-je mettre le lien symbolique?
Pourquoi voulez-vous faire cela? L'idée derrière les liens symboliques est que vous n'avez pas besoin de garder une trace de la destination finale. A l'intérieur de [[]] 'vous n'avez pas besoin d'utiliser les guillemets alors qu'il peut être conseillé de les utiliser avec votre commande' ln'. Il est préférable d'utiliser '$()' au lieu de backticks. Vous devriez utiliser '! =' Au lieu de -ne lorsque vous utilisez '[[]]'. –
@Dennis, édité pour clarifier et fait les changements suggérés. – BCS