
Ich habe eine einfache, sehr kleine Webanwendung und wollte mir das Leben mit einem sehr einfachen Bereitstellungsskript etwas leichter machen, das Folgendes macht:
- Updates von Git abrufen
- Ausführen von Composer
- Besitzer aller Dateien ändern
Das Skript funktioniert grundsätzlich einwandfrei und sieht folgendermaßen aus:
#!/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!";
Wie Sie jedoch sehen, habe ich in diesem Skript zwei Befehle, die als sudo ausgeführt werden. Nämlich den git pull
und den chown
.
Mein Problem ist folgendes: Mir ist bewusst, dass es ein Timeout gibt, wie oft das System nach meinem Passwort fragt, wenn ich Befehle mit sudo ausführe. Das Problem ist, dass das Skript, obwohl ich mich deutlich innerhalb des Timeouts befinde,stetsfragt nach dem Passwort auf demzweitesudo (chown)-Befehl.
Kann mich bitte jemand aufklären, warum das so sein könnte?
Antwort1
Ich weiß nicht genau, was der Grund ist, aber es gibt eine Lösung:
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
Antwort2
Warum führen Sie das Skript nicht sudo
wie folgt aus:
sudo bash /path/to/script.sh
Wobei script.sh
folgender Inhalt ohne ist 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!"
Auf diese Weise werden Sie vom Skript nur einmal nach dem Kennwort gefragt.