
私は非常に小さなシンプルな Web アプリを持っており、次のような非常に単純なデプロイメント スクリプトを使用して作業を少し楽にしたいと考えていました。
- 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 として実行されるコマンドが 2 つあります。つまり、 とgit pull
ですchown
。
私の問題は次のとおりです。sudoでコマンドを実行するときにシステムがパスワードを要求する頻度にはタイムアウトがあることは知っています。問題は、タイムアウト内に十分入っているにもかかわらず、スクリプトがいつもパスワードを要求します2番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!"
この方法では、スクリプトはパスワードを 1 回だけ要求します。