J'ai un script simple:
#!/bin/bash
for server in $(~/.ansible/ansible_hosts)
do
ssh $server "hostname; readlink /opt/mydir/mylink;"
done
Cela fonctionne bien - le programme retourne le nom d’hôte et le lien corrects - sauf que j’obtiens l’erreur suivante sur certains serveurs mais pas tous:
Shell-init: erreur lors de l'extraction du répertoire en cours: getcwd: impossible d'accéder aux répertoires parents: aucun fichier ou répertoire de ce type
Tous les répertoires existent. L’une des suggestions les plus courantes a été d’ajouter un cd, un cd - ou un cd /. Tout ce qui se passe lorsque cette étape est ajoutée est un supplémentaire:
chdir: erreur lors de l'extraction du répertoire en cours: getcwd: impossible d'accéder aux répertoires parents: aucun fichier ou répertoire de ce type
J'ai essayé de relancer le démon nfs au cas où il y aurait une certaine confusion à propos de mon homedir et de substituer /etc/init.d au cas où le problème serait avec/opt. Aucune différence
Ce serait simplement une gêne, sauf que lorsque j'essaie d'utiliser un livre de lecture ansible au lieu d'une simple commande ssh, il échoue pour ce serveur.
Toutes les idées seraient appréciées.
Je crois que l'erreur n'est pas du tout liée au script. Le problème est le suivant: le répertoire dans lequel vous vous trouvez lorsque vous essayez d'exécuter le script n'existe plus. Par exemple, vous avez deux terminaux, cd somedir/
au premier puis mv somedir/ somewhere_else/
au second, puis essayez de courir dans le premier terminal - vous recevrez ce message d'erreur.
Au moins c'était dans mon cas.
Vous exécutez ceci en tant que script .. $ (~/.ansible/ansible_hosts). Le $ () signifie que bash tentera d'exécuter ce script puis affichera les résultats.
Mais ce n'est pas un script, non? C'est une liste d'hôtes!
Ajoutez simplement le mot cat
et cela devrait fonctionner.
#!/bin/bash
for server in $(cat ~/.ansible/ansible_hosts)
do
ssh $server "hostname; readlink /opt/mydir/mylink;"
done