Ich arbeite derzeit an einem Programm, das ein Programm automatisch starten muss, wenn es registriert, dass dieses Programm nicht bereits geöffnet ist. Es benötigt Superuser-Rechte zum Booten. Derzeit habe ich eine Arbeits Bash-Skript, auf der Suche wie folgt:Bash-Skript mehrere Befehle Problem
#!/bin/bash
while true; do #Continue indefinitely
if [ $(ps aux | grep '/odroid_detection' | grep -v '<defunct>' -c) -le 4 ]; then #if less than 3 odroid_servers are active (booter opens 3 processes)
xterm -iconic -e su -c "xterm -iconic -hold /home/odroid/Documents/SUNRISE-Odroid/_odroid_detection/_odroid_detection/bin/Debug/_odroid_detection"
fi
sleep 60 #check every minute
done
Das Programm, das jedoch ausgeführt wird, funktioniert nicht genau wie geplant, weil es von der Wurzel Karte anstelle der Karte, um diese in ist ausgeführt wird. Ich möchte daher auf die Karte, in der sich die ausführbare Datei befindet (~/Documents/SUNRISE-Odroid/_odroid_detection/_odroid_detection/bin/Debug), aber die gleiche Funktionalität wie oben erwähnt haben. Das ist, was ich kam mit:
#!/bin/bash
while true; do #Continue indefinitely
if [ $(ps aux | grep '/odroid_detection' | grep -v '<defunct>' -c) -le 4 ]; then #if less than 3 odroid_servers are active (booter opens 3 processes)
xterm -iconic -e "cd ../_odroid_detection/_odroid_detection/bin/Debug/ && su -c "xterm -iconic -hold -e _odroid_detection""
fi
sleep 60 #check every minute
done
Dies funktioniert jedoch nicht, und ich habe viele Alternativen ausprobiert, aber ich kann nicht scheinen, daran zu arbeiten .. Es die folgenden Fehler im Terminal gibt:
xterm: Can't execvp cd ../_odroid_detection/_odroid_detection/bin/Debug && su -c xterm: No such file or directory
Das Xterm, das diesen Fehler gibt, öffnet sich in der Karte ~/Documents/SUNRISE-Odroid/Bash, und das Ausführen der oben genannten CD funktioniert, wenn ich es separat ausführe, also verstehe ich nicht, warum es die Datei nicht finden kann Verzeichnis.
Irgendwelche Vorschläge?
Nicht verwandt mit der Bash-Frage. Haben Sie darüber nachgedacht, [Supervisor] (http://supervisord.org/) zu verwenden? Dies ist die genaue Art der Sache, die der Supervisor tut; Behalte X Anzahl der Prozesse am Leben (über die Konfigurationseinstellung 'numprocs'). – Dencker
Wie in 'man xterm
choroba
Okay, die Einfärbung von StackOverflow ließ mich einen Fehler, den ich gemacht habe, verstehen: Das Anfangszitat nach 'su -c' wird als Endzitat der xterm execute-Zeile interpretiert. Ich habe jetzt ein Arbeitsprogramm, wird die Lösung in ein bisschen posten. – Timmeh