¿Por qué sudo requiere una contraseña la segunda vez en un script bash cada vez?

¿Por qué sudo requiere una contraseña la segunda vez en un script bash cada vez?

Tengo una aplicación web muy pequeña y sencilla y quería hacerme la vida un poco más fácil con un script de implementación muy simplista que hace lo siguiente:

  1. Extraer actualizaciones de git
  2. Ejecutar compositor
  3. Cambiar propietario de todos los archivos

El script básicamente funciona bien y tiene este aspecto:

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

Sin embargo, como puede ver, tengo dos comandos ejecutados como sudo en este script. Es decir, el git pully el chown.

Mi problema es el siguiente: Soy consciente de que hay un tiempo de espera en la frecuencia con la que el sistema solicita mi contraseña cuando ejecuta comandos con sudo. El problema es que, aunque estoy dentro del tiempo de espera, el scriptsiemprepide la contraseña delsegundoComando sudo (chown).

¿Podría alguien explicarme por qué puede ser así?

Respuesta1

Realmente no sé cuál es el motivo, sin embargo hay una solución:

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

Respuesta2

¿Por qué no ejecutas un script sudocomo este?

sudo bash /path/to/script.sh

Donde script.shtiene el siguiente contenido sin 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!"

De esta manera, el script solo le pedirá la contraseña una vez.

información relacionada