So, okay, da werde ich dann wohl den ganzen Abend noch rumbasteln & alles durchtesten.
Allerdings habe ich noch eine Frage wie ich das am besten mit der If-Anweisung anstelle, weil dann hätte ich den größten Teil des Codes doppelt, selbst wenn ich das ganze in eine Funktion packe, habe ich einige Zeilen doppelt.
Aber da muss es doch eine Möglichkeit geben, dass alles in eine If-Anweisung zu packen, oder?
Sinngemäß müsste ungefähr so ausschauen, wie ich das aber in Echt anstelle weiß ich leider echt noch nicht... hmmm...
Code:
if [ ($use_pid = 0 -a(DANN) pgrep...) -o ($use_pid = 1 -a ! -e PID-FILE) ]; then
Ich habe mir schon fast gedacht, dass ich das irgendwie so machen könnte:
Code:
if [ -z "`which pgrep`" ]; then
use_pid=1
if_start='! -e \"${path_shoutcast}/server.pid\"'
else
use_pid=0
if_start='\( -z "`pgrep -f \"${path_shoutcast}/sc_serv\"`" -a $use_user -eq 0 \) -o \( -z "`pgrep -u $username -f \"${path_shoutcast}/sc_serv\"`" -a $use_user -eq 1 \)'
fi
und hier dann so:
Code:
if [ $if_start ]; then
Das wäre immerhin eine Möglichkeit?
Nur leider bekomme ich folgende Fehlermeldung:
Code:
h852677:~/bash-scripting# ./shoutcast-control start
+ path_shoutcast=/home/shoutcast
+ use_screen=1
+ use_user=1
+ username=shoutcast
+ check_root=1
++ which pgrep
+ '[' -z /usr/bin/pgrep ']'
+ use_pid=0
+ if_start=\( -z "`pgrep -f \"${path_shoutcast}/sc_serv\"`" -a $use_user -eq 0 \) -o \( -z "`pgrep -u $username -f \"${path_shoutcast}/sc_serv\"`" -a $use_user -eq 1 \)
+ '[' '(' 0 -eq 0 ')' -a '(' 1 -eq 1 ')' -a '(' 1 -ne 1 ')' ']'
+ '[' '\(' -z '"`pgrep' -f '\"${path_shoutcast}/sc_serv\"`"' -a '$use_user' -eq 0 '\)' -o '\(' -z '"`pgrep' -u '$username' -f '\"${path_shoutcast}/sc_serv\"`"' -a '$use_user' -eq 1 '\)' ']'
./shoutcast-control: line 57: [: too many arguments
+ echo -ne '\033[0;31mERROR\033[0m Server scheint bereits online zu sein...\n'
ERROR Server scheint bereits online zu sein...
+ exit 1
Aber wie gesagt, gäb es da vllt. eine Möglichkeit das ganze in eine Anweisung zu packen?
MfG
Michael
EDIT:
So, jetzt hab ich das ganze nochmal durchdacht und bin auf folgende If-Anweisung bekommen, die rein theoretisch alles genau so erfüllen müsste, wie ich mir das vorstelle =)
Allerdings kommt folgendes dabei raus:
Code:
h852677:~/bash-scripting# ./shoutcast-control start
+ path_shoutcast=/home/shoutcast
+ use_screen=1
+ use_user=1
+ username=shoutcast
+ check_root=1
++ which pgrep
+ '[' -z /usr/bin/pgrep ']'
+ use_pid=0
+ '[' '(' 0 -eq 0 ')' -a '(' 1 -eq 1 ')' -a '(' 1 -ne 1 ')' ']'
++ pgrep -f /home/shoutcast/sc_serv
++ pgrep -u shoutcast -f /home/shoutcast/sc_serv
+ '[' '((' 0 = 0 ')' -a '(' -z '' -a 1 -eq 0 ')' -o '(' -z '' -a 1 -eq 1 '))' -o '((' 0 = 1 ')' -a '(' '!' -e /home/shoutcast/server.pid '))' ']'
./shoutcast-control: line 55: [: too many arguments
+ echo -ne '\033[0;31mERROR\033[0m Server scheint bereits online zu sein...\n'
ERROR Server scheint bereits online zu sein...
+ exit 1
Kann das sein, dass er bei so einer geringen Anzahl an Anweisungen schon schlapp macht?
Die If-Anweisung dazu:
Code:
if [ \(\( $use_pid = 0 \) -a \( -z "`pgrep -f \"${path_shoutcast}/sc_serv\"`" -a $use_user -eq 0 \) -o \( -z "`pgrep -u $username -f \"${path_shoutcast}/sc_serv\"`" -a $use_user -eq 1 \)\) -o \(\( $use_pid = 1 \) -a \( ! -e "${path_shoutcast}/server.pid" \)\) ]; then
MfG
Michael
Lesezeichen