Puedo ejecutar el siguiente script de shell desde el símbolo del sistema como se esperaba:
/bin/sh -xv /home/shantanu/backup_transfer.sh
Pero cuando lo configuro en un cron, no se ejecuta correctamente. Hay 2 comandos. ssh-t[correo electrónico protegido]"sudo ls" y sudo rsync -avze a otro servidor.
¿Por qué fallaría un script de shell en un cron cuando se ejecuta correctamente en el símbolo del sistema?
$ which sh
/bin/sh
¿Estoy utilizando el entorno correcto?
Actualizar:
Error for the first ssh -t command:
Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: sorry, you must have a tty to run sudo
Error for the second sudo rsync command:
sudo: sorry, you must have a tty to run sudo
No se produjo ningún error al ejecutar el script en el símbolo del sistema.
Respuesta1
Para corregir el error sudo tty, debe modificar el archivo /etc/sudoers en el host en el que está emitiendo el comando sudo.
#Here is an example of how to turn off the requirement of a tty for a user called "USERNAME"
Defaults:USERNAME !requiretty
Respuesta2
Actualizar /etc/sudoers e insertar !requiretty es la mejor opción. Sin embargo, en ciertos casos es posible que no tenga acceso en el sistema remoto para habilitar/deshabilitar requiretty en /etc/sudoers.
En estas situaciones, puede utilizar un doble tt como solución alternativa. Un doble tt incluso funciona en cron.
ssh -tt user@remoteserver /some/dir/remotecommand