O Sudo tem algumas opções especiais no seu arquivo de permissões, uma das quais permite uma restrição em seu uso para shells que estão sendo executados dentro de um TTY, o que o cron não é.
Algumas distribuições, incluindo o Amazon Linux AMI, têm isso habilitado por padrão. O arquivo /etc/sudoers
será parecido com isto:
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
#
Defaults requiretty
#
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
Defaults !visiblepw
Se você tivesse capturado a saída para STDERR no nível do shell script em vez do comando sudo, você teria uma mensagem como esta:
sorry, you must have a tty to run sudo
A solução é permitir que o sudo seja executado em ambientes não-TTY, removendo ou comentando essas opções:
#Defaults requiretty
#Defaults !visiblepw