Почему sudo каждый раз требует пароль второй раз в скрипте bash?

Почему sudo каждый раз требует пароль второй раз в скрипте bash?

У меня есть простое, очень маленькое веб-приложение, и я хотел немного облегчить себе жизнь, создав очень простой скрипт развертывания, который делает следующее:

  1. Извлечь обновления из git
  2. Запустить композитора
  3. Изменить владельца всех файлов

Скрипт в принципе работает нормально и выглядит так:

#!/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!"

Таким образом, скрипт запросит у вас пароль только один раз.

Связанный контент