La commande n'exécute-t-elle pas dans le script shell?

#!/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 

La deuxième commande entre parenthèses n'effectue aucune idée de la raison pour laquelle cela se produit

Vous devez utiliser un chemin absolu avec sudo , pour des raisons de sécurité:

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

Vérifiez la sortie de sudo -l pour confirmer. De la page de manuel sudoers (1.7.x):

Un Cmnd_List est une liste d'un ou plusieurs nom de commande, répertoires et autres alias. Un nom de commande est un filename entièrement qualifié qui peut inclure des caractères génériques de style shell (voir la section des caractères génériques ci-dessous).

sudo xargs fonctionne car xargs est (presque certainement) trouvé dans un chemin de confiance ( /usr/bin ).

Aussi, vérifiez pgrep et pkill , cela vous permettra d'économiser les acrobaties innombrables de ps pipe.

Vous avez le potentiel de fuites de ressources et d'autres comportements indésirables avec une kill -9 inconditionnelle kill -9 , voir https://unix.stackexchange.com/questions/8916/why-not-kill-9-a-processus .

La mise à jour vous a ajouté que vous l'exécutez via le crontab de la racine: la racine n'a pas besoin d'utiliser sudo et, dans certains cas, la racine risque de ne pas exécuter sudo , vérifiez ce que sudo -l dit lorsque vous êtes root. Si vous voulez pouvoir démarrer un programme (qui ne change pas son propre uid) en tant qu'utilisateur spécifique, alors la manière courante est su - username -c "command" .