armazena na variável um resultado sudo

0

Eu tenho este script simples

#!/bin/sh
ISUP='sudo /etc/init.d/jboss7 status | grep running'
echo "ISUP: " $ISUP

se eu executar manualmente, funciona bem

[jboss@suc072-ipos ~]$ sh a.sh
ISUP:  JBoss AS 7.1.1 is running (pid 29125)

mas se eu executar com crontab a variável está vazia: O: (

* * * * * /home/jboss/a.sh > /home/jboss/a.log
[jboss@suc072-ipos ~]$ cat a.log
ISUP:

alguma ideia de como corrigir isso?

linux centos

[jboss@suc072-ipos ~]$ cat /etc/redhat-release
CentOS release 6.7 (Final)
    
por Vivy Rojas Valverde 08.09.2016 / 04:07

1 resposta

0

A menos que você tenha configurado o sudo para a conta em que esta tarefa do cron está sendo executada para não exigir uma senha e você também modificou /etc/sudoers para comentar a linha Defaults requiretty e (possivelmente) adicionada / etc/init.d/ ao seguro caminho este sempre falhará quando executado de forma não interativa, como acontece em um cronjob.

Em vez disso, o método amplamente preferido é configurar a tarefa cron para ser executada como root e remover o sudo do script. Para adicionar um cronjob que será executado como root use o comando:

sudo crontab -e

Adicione o cronjob da mesma maneira que você fez anteriormente.

Em seguida, remova o sudo do script, aqui com outras pequenas alterações de limpeza / sugeridas:

#!/bin/bash
ISUP="$(/etc/init.d/jboss7 status | grep running)"
echo "ISUP:  $ISUP"
    
por 08.09.2016 / 04:44