Exécuter la commande unix via tomcat

Je lance un script contenant les commandes suivantes

#!/bin/bash ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

J’ai un wrapper java pour exécuter ce script en utilisant Runtime.exec (…). L’exécution de ce code Java fonctionne bien tout le temps.

Le problème est que lorsque j’utilise cette méthode java sous tomcat, cela me donne une erreur
script.sh: line 3: ifconfig: command not found
Redémarrer le service tomcat, le script s’exécute parfaitement pendant un certain temps, après quoi ce problème persiste.

Comment résoudre ce problème?

EDIT: code Java:

 Ssortingng executableScript = /script.sh; Ssortingng line; Ssortingng output; Ssortingng[] command = {executableScript}; Process process = Runtime.getRuntime().exec(command); BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); while ((line = input.readLine()) != null) { output.append(line); } process.waitFor(); input.close(); 

L’erreur script.sh: line 3: ifconfig: command not found signifie que le shell (lancé par tomcat pour exécuter la commande) recherche son PATH pour trouver le programme ifconfig , et qu’il ne le trouve pas. La valeur de la variable PATH du shell provenait de Tomcat, qui l’avait obtenue de trois endroits:

  1. Si Tomcat a été démarré par un utilitaire système ( /etc/init.d ou systemd par exemple), alors tomcat obtiendrait son chemin à partir de là.

  2. Si tomcat a été démarré par une commande à partir de votre terminal, alors tomcat a probablement obtenu son chemin depuis votre environnement.

  3. Tomcat (ou toute classe Java exécutée dans tomcat) pourrait modifier son PATH après le démarrage.

Si vous trouvez que le script échoue toujours lorsque tomcat a été lancé par un utilitaire système, et que cela fonctionne toujours lorsque tomcat a été démarré depuis votre terminal, le problème est # 1. Le PATH que tomcat reçoit du système n’inclut pas le répertoire contenant ifconfig .

Si vous trouvez que le script fonctionne pendant un certain temps après le démarrage de tomcat, puis qu’il commence à échouer jusqu’à ce que vous redémarriez tomcat, alors quelque chose dans tomcat modifie la variable d’environnement PATH de tomcat. Tomcat lui-même ne contient probablement aucun code pour ce faire, vous devriez donc regarder les applications que vous avez déployées dans tomcat.

Utilisez le chemin d’access complet à ifconfig dans votre script, qui est généralement:

 /sbin/ifconfig 

Lorsqu’il est exécuté à partir du service tomcat, il hérite de l’environnement d’exécution du service, tel que $ PATH.