J'ai une application Web très petite et je voulais me faciliter la vie en ayant un script de déploiement très simpliste, qui fait ce qui suit:
Le script fonctionne très bien et ressemble à ceci:
#!/bin/bash
echo "Updating repository ...";
Sudo git pull;
echo "Installing composer dependencies from lockfile ...";
composer install;
echo "Changing owner to www-data:www-data ...";
Sudo chown -R www-data:www-data .;
echo "Deployment DONE!";
Cependant, comme vous pouvez le voir, j'ai deux commandes exécutées en tant que Sudo dans ce script. Nommez le git pull
et le chown
.
Mon problème est le suivant: je suis conscient qu'il existe un délai pour la fréquence à laquelle le système demande mon mot de passe lors de l'exécution de commandes avec Sudo. Le problème est que, même si je suis dans le délai imparti, le script toujours demande le mot de passe sur la commande second Sudo (chown).
Quelqu'un pourrait-il m'éclairer, pourquoi cela pourrait-il être le cas?
Je ne sais pas vraiment quelle est la raison, mais il y a une solution:
if [[ $(id -u $(whoami)) != 0 ]]
then
Sudo bash $( cd $(dirname $0) ; pwd -P )
# taken from http://stackoverflow.com/a/4774063/2797066
else
#rest of script
fi
Pourquoi ne lancez-vous pas un script avec Sudo
comme ceci:
Sudo bash /path/to/script.sh
Où script.sh
a le contenu suivant sans Sudo
:
#!/bin/bash
echo "Updating repository ...";
git pull;
echo "Installing composer dependencies from lockfile ...";
composer install;
echo "Changing owner to www-data:www-data ...";
chown -R www-data:www-data .;
echo "Deployment DONE!"
De cette façon, le script ne vous demandera le mot de passe qu'une seule fois.