executando script contendo sudo no cron

0
#!/bin/bash
value=$(<man.txt)
echo "$value"

if [ "$value" == "true" ]; then
    echo "startedif_manthan"
      ps -ef|grep sym |awk '{ print $2 }'|sudo  xargs kill -9;
      sleep 30;
    sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server;
fi

Eu preciso rodar acima do script no cron. Será executado no cron sem senha?

Alguma sugestão?

    
por user1597811 14.02.2013 / 08:09

2 respostas

0

Você pode configurar sudo para não exigir uma senha:

  1. Tornar /var/www/symmetric-ds-3.1.6/bin/sym executável:

    $ chmod a+x /var/www/symmetric-ds-3.1.6/bin/sym
    
  2. Substitua seu script:

    sudo sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
    

    com:

    sudo /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
    
  3. Use visudo para adicionar a seguinte linha a /etc/sudoers :

    <user who runs the cronjob> ALL = NOPASSWD:/path/to/xargs [-0-9 a-z]*, /var/www/symmetric-ds-3.1.6/bin/sym [-0-9 a-z]*
    
por 14.02.2013 / 08:56
2

Eu prefiro esquematizar o script de forma semelhante a:

#!/bin/sh
read value < /path/to/man.txt

if [ "$value" = "true" ]; then
    pkill -u root '^sym$' && sleep 30
    sh /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server
fi

Como você deseja executar todos os comandos como root, coloque-o no crontab do root. Se você não precisa executar nada como root, não faça isso. Se você realmente precisar executá-lo via sudo através de direitos especificamente configurados para determinados aplicativos, traga de volta sudo , mas observe que você também precisará configurar direitos especificamente para eliminar o programa (a menos que tenha um equivalente a --kill interruptor).

Eu limpei o echo s, já que instruções print desnecessárias em um crontab apenas irão sobrecarregar os logs. Você poderia implementar um mecanismo de registro no script, se necessário.

    
por 14.02.2013 / 09:05