Posso executar o seguinte script de shell no prompt de comando conforme esperado:
/bin/sh -xv /home/shantanu/backup_transfer.sh
Mas quando eu configuro em um cron, ele não executa corretamente. Existem 2 comandos. ssh-t[e-mail protegido]"sudo ls" e sudo rsync -avze para outro servidor.
Por que um script de shell falharia em um cron quando executado com êxito no prompt de comando?
$ which sh
/bin/sh
Estou usando o ambiente correto?
Atualizar:
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
Nenhum erro ao executar o script no prompt de comando.
Responder1
Para corrigir o erro sudo tty, você precisa modificar o arquivo /etc/sudoers no host no qual você está emitindo o comando sudo.
#Here is an example of how to turn off the requirement of a tty for a user called "USERNAME"
Defaults:USERNAME !requiretty
Responder2
Atualizar /etc/sudoers e inserir !requiretty é a melhor opção. No entanto, em certos casos, você pode não ter acesso no sistema remoto para ativar/desativar o requiretty em /etc/sudoers.
Nessas situações, você pode usar um tt duplo como solução alternativa. Um duplo tt funciona até no cron.
ssh -tt user@remoteserver /some/dir/remotecommand