Habilitar o comando
sudo a rodar sem tty sendo possível executá-lo pelo Cron.
Algumas vezes precisamos executar certos scripts no cron sem que seja pelo usuário root, isso ocorre geralmente em ambientes de alta segurança, ou quando os scripts podem estar em diretórios com acesso externo e/ou principalmente acesso web.
Porém, pode ocorrer nesses casos, que rodando/executando o script manualmente ele funcione sem erros, mas quando adicionado ao cron ele simplesmente não executa como deveria, ou executa em partes.
Isso ocorre porque no script, em alguns comandos e acessos, é necessário utilizar previamente o comando sudo, já que não está sendo executado como root.
Só que o comando sudo não funciona quando executado pelo cron, nativamente esse comando necessita de uma sessão, um tty para ser executado.
Essa instrução fica no arquivo de configuração do sudo. Você encontrará algo assim:
# vim /etc/sudoers
# Disable "ssh hostname sudo"", because it will show the password in clear.
# You have to run "ssh -t hostname sudo ".
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
Primeiro passo para que funcione o sudo é comentar ou remover essas linhas:
#Defaults requiretty
#Defaults !visiblepw
Ou caso você queira que apenas o usuário específico que vai executar o script possa dar sudo sem shell, adicione a linha (no nosso exemplo o nome do usuário é usercron):
Defaults:usercron!requiretty
Depois no usuário que você precisa dar sudo, habilite a opção para não pedir senha.
De preferência adicione também os comandos que serão necessários no script e o próprio caminho do script.
No exemplo abaixo uma rotina simples de backup que é executada pelo script script_bkp.sh.
# vim /etc/sudoers
usercron ALL=NOPASSWD: /bin/tar, /bin/chown, /bin/chgrp, /bin/rm, /usr/bin/rsync, /usr/bin/sudo, /srv/scripts/script_bkp.sh
Espero ter ajudado.
Nenhum comentário foi encontrado.