
У меня есть простое, очень маленькое веб-приложение, и я хотел немного облегчить себе жизнь, создав очень простой скрипт развертывания, который делает следующее:
- Извлечь обновления из git
- Запустить композитора
- Изменить владельца всех файлов
Скрипт в принципе работает нормально и выглядит так:
#!/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!";
Однако, как вы видите, в этом скрипте у меня есть две команды, запущенные как sudo. А именно git pull
и chown
.
Моя проблема заключается в следующем: я знаю, что существует тайм-аут того, как часто система запрашивает мой пароль при запуске команд с помощью sudo. Проблема в том, что, хотя я и уложился в тайм-аут, скриптвсегдазапрашивает пароль навторойкоманда sudo (chown).
Может ли кто-нибудь объяснить мне, почему так происходит?
решение1
Я не знаю, в чем причина, но есть решение:
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
решение2
Почему бы вам не запустить скрипт sudo
следующим образом:
sudo bash /path/to/script.sh
Где script.sh
есть следующий контент без 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!"
Таким образом, скрипт запросит у вас пароль только один раз.