Por que o sudo exige uma senha pela segunda vez em um script bash toda vez? [duplicado]

2

Eu tenho um aplicativo da web simples e muito pequeno e queria facilitar um pouco minha vida com um script de implantação muito simplista, que faz o seguinte:

  1. Puxar atualizações do git
  2. Executar compositor
  3. Alterar o proprietário de todos os arquivos

O script basicamente funciona bem e é assim:

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

No entanto, como você pode ver, eu tenho dois comandos executados como sudo neste script. Nomeie o git pull e o chown .

Meu problema é o seguinte: Estou ciente de que há um tempo limite para a frequência com que o sistema solicita minha senha ao executar comandos com o sudo. O problema é que, apesar de eu estar bem dentro do tempo limite, o script sempre pede a senha no comando second sudo (chown).

Alguém poderia, por favor, me esclarecer, por que isso pode ser o caso?

    
por ArSeN 07.05.2016 / 14:28

2 respostas

2

Por que você não executa o script com sudo da seguinte forma:

sudo bash /path/to/script.sh

Em que script.sh tem o seguinte conteúdo sem 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!"

Desta forma, o script pedirá apenas a senha por 1 hora.

    
por snoop 07.05.2016 / 15:02
0

Eu realmente não sei qual é a razão, mas há solução:

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
    
por enedil 07.05.2016 / 14:51