
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:
- Extraer actualizaciones de git
- Ejecutar compositor
- 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 pull
y 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 sudo
como este?
sudo bash /path/to/script.sh
Donde script.sh
tiene 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.