O comando não está executando dentro do shell script?

0
#!/bin/bash
value=$(</var/www/sym_monitor/man.txt)


if [ "$value" == "true" ]; then

     ps -ef|grep sym |grep -v grep |awk '{ print $2 }'|sudo  xargs kill -9;


(cd /var/www/symmetric-ds-3.1.6/bin;sudo ./sym --port 8082 --server);

fi

O segundo comando dentro de colchetes não está fazendo nenhuma ideia do porquê isso está acontecendo?

    
por user1597811 18.02.2013 / 12:43

1 resposta

0

Você deve usar um caminho absoluto com sudo , por motivos de segurança:

( sudo /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server );

Verifique a saída de sudo -l para confirmar. Na página sudoers man (1.7.x):

A Cmnd_List is a list of one or more commandnames, directories, and other aliases. A commandname is a fully qualified filename which may include shell-style wildcards (see the Wildcards section below).

sudo xargs funciona porque xargs é (quase certamente) encontrado em um caminho confiável ( /usr/bin ).

Além disso, confira pgrep e pkill , isso economizará as desnecessárias ps pipe acrobatics.

Você tem o potencial de vazamentos de recursos e outros comportamentos indesejados com um kill -9 incondicional, consulte link .

Atualize você adicionou que você executa isso via root, o crontab-root não precisa usar sudo e, em alguns casos, o root pode ser evitado executando sudo , verifique o que o sudo -l diz quando você é root. Se você quer ser capaz de iniciar um programa (que não muda seu próprio uid) como um ID de usuário específico, então o caminho comum é su - username -c "command" .

    
por 18.02.2013 / 12:58