Autor Thema: Shellscript Programm start&stop  (Gelesen 2324 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline LucyDemoon

  • Jr. Mitglied
  • **
  • Beiträge: 81
  • Dankeschön: 6 mal
    • Nova Arts
  • Desktop: KDE Plasma 5.X
  • Grafikkarte: NVIDIA GTX 1070
  • Grafikkartentreiber: nonfree
  • Kernel: 4.9LTS
  • Prozessor: Xeon E5-2630-v4 (10core)
  • Skill: Durchschnitt
  • Zweig: Stable
Shellscript Programm start&stop
« am: 21. Oktober 2015, 09:34:33 »
Hey

Ein Anfänger braucht Hilfe^^
Und zwar hab ich ein Programm das ich starten möchte mit "./ww.sh start" und mit "./ww.sh stop" stopen, das Starten funktioniert soweit schon.
Nur wenn das Programm gestartet wir steht im Terminal das man Mit Q und dann Enter drücken muss was ich nicht verstehe wie das gehen soll das es dann mit dem Befehlt "./ww.sh stop" funktioniert.
und alles Was auf dem Terminal erscheint soll in ein Log ausgegebn werden, was teils Funktioniert allso zumindest das Erstellen der Datei.

Ein Bild wo man sieht was ich mit Qund Enter meine:




Hier mal der Code was ich bisher habe:
Code: Bash
  1. #!/bin/bash
  2.  
  3. ## Startup script for Windward Server
  4. #
  5. # description: Nova Arts Windward Server Script
  6. #
  7. ##
  8.  
  9.  
  10. echo "wird gestartet ..."
  11. sleep 5
  12.  
  13. Pn="NovaWind"
  14. Sname="Nova Arts Windward Server"
  15. Wname="nvaworld"
  16. Port=5127
  17. Dir="/home/lucy/Programme/ww"
  18. log="/home/lucy/Programme/ww/Logs"
  19.  
  20. NOW=$(date +"%m-%d-%Y_%T")
  21. FILE="${Pn}-${NOW}.log"
  22.  
  23. echo
  24. echo "Port: ${Port} / Weltname: ${Wname} / Servername: ${Sname}"
  25. echo
  26.  
  27.  
  28. case "$1" in
  29.    
  30.     start)
  31.         echo -n "Starte Server..."
  32.         echo
  33.         if [ ! -d "$log" ]; then #erstelle ordner wenn nicht vorhanden
  34.             mkdir "$log"
  35.         fi
  36.        
  37.         mono WWServer.exe -name "${Sname}" -tcp "${Port}" -world "${Wname}" -localPath
  38.         echo -n >> ${log}/${FILE}
  39.         ;;
  40.    
  41.     stop)
  42.         echo -n "Stoppe Server:"
  43.         killproc ${Pn}
  44.         echo
  45.         ;;
  46.    
  47.     status)
  48.         status ${Pn}
  49.         ;;
  50.    
  51.     restart)
  52.         $0 stop
  53.         $0 start
  54.         ;;
  55.    
  56.     reload)
  57.         echo -n "Wird neu geladen.."
  58.         killproc ${Pn} -HUP
  59.         echo
  60.         ;;
  61.         *)
  62.         echo "Usage: $0 {start|stop|restart|reload|status}"
  63.        
  64.         exit1
  65. esac
  66. exit 0

Offline klesk

  • Held Mitglied
  • *****
  • Beiträge: 1194
  • Dankeschön: 142 mal
  • Desktop: herbstluftwm
  • Grafikkartentreiber: nvidia 3.40xx
  • Kernel: 4.2
  • Prozessor: Intel Core2 Quad Q9550 (-MCP-)
  • Skill: Durchschnitt
  • Zweig: unstable
Re: Shellscript Programm start&stop
« Antwort #1 am: 21. Oktober 2015, 11:57:44 »
So, hab mal den Code ein wenig verändert, und hoffe es klappt auch mit der mono-Syntax problemlos.

Code: Bash
  1.     #!/bin/bash
  2.      
  3.     ## Startup script for Windward Server
  4.     #
  5.     # description: Nova Arts Windward Server Script
  6.     #
  7.     ##
  8.    
  9.      
  10.     Pn="NovaWind"
  11.     Sname="Nova Arts Windward Server"
  12.     Wname="nvaworld"
  13.     Port=5127
  14.     Dir="/home/lucy/Programme/ww"
  15.     log="/home/lucy/Programme/ww/Logs"
  16.      
  17.     NOW=$(date +"%m-%d-%Y_%T")
  18.     FILE="${Pn}-${NOW}.log"
  19.      
  20.     echo
  21.     echo "Port: ${Port} / Weltname: ${Wname} / Servername: ${Sname}"
  22.     echo
  23.      
  24.      
  25.     case "$1" in
  26.        
  27.         start)
  28.             echo "wird gestartet ..."
  29.             sleep 5
  30.             echo -n "Starte Server..."
  31.             echo
  32.             if [ ! -d "$log" ]; then #erstelle ordner wenn nicht vorhanden
  33.                 mkdir "$log"
  34.             fi
  35.            
  36.             mono WWServer.exe -name "${Sname}" -tcp "${Port}" -world "${Wname}" -localPath > ${log}/${FILE} 2> {log}/${FILE}-ERROR &
  37.             ;;
  38.        
  39.         stop)
  40.             echo -n "Stoppe Server:"
  41.             killproc ${Pn}
  42.             echo
  43.             ;;
  44.        
  45.         status)
  46.             status ${Pn}
  47.             ;;
  48.        
  49.         restart)
  50.             $0 stop
  51.             $0 start
  52.             ;;
  53.        
  54.         reload)
  55.             echo -n "Wird neu geladen.."
  56.             killproc ${Pn} -HUP
  57.             echo
  58.             ;;
  59.             *)
  60.             echo "Usage: $0 {start|stop|restart|reload|status}"
  61.            
  62.             exit1
  63.     esac
  64.     exit 0
  65.  

Das erste Echo+Sleep hab ich nur verschoben, damit es nicht auch bei Aufrufen von STOP etc ausgeführt wird.
Die Beiden Kanäle STDOUT und STDERR werden jetzt direkt, ohne ein extra echo, in verschiedene Dateien geschrieben und der Prozess wird ausgekoppelt und in den Hintergrund verschoben.
« Letzte Änderung: 21. Oktober 2015, 12:01:42 von klesk »

Offline LucyDemoon

  • Jr. Mitglied
  • **
  • Beiträge: 81
  • Dankeschön: 6 mal
    • Nova Arts
  • Desktop: KDE Plasma 5.X
  • Grafikkarte: NVIDIA GTX 1070
  • Grafikkartentreiber: nonfree
  • Kernel: 4.9LTS
  • Prozessor: Xeon E5-2630-v4 (10core)
  • Skill: Durchschnitt
  • Zweig: Stable
Re: Shellscript Programm start&stop
« Antwort #2 am: 21. Oktober 2015, 18:32:22 »
danke schön funktioniert

und jetzt weis ich auch wie man das in den Hintergrund schiebt und Dateien richtig in eine Datei schreibt. habe zum test mal das -ERROR entfernt und das & stehen lassen.
in die log schreibt er jetzt extrem schnell und das log hat 2,4gb nach 2 Minuten.

Zitat
[2015.10.21 18:16:57] Press 'q' followed by ENTER when you want to quit.

[2015.10.21 18:16:57] Press 'q' followed by ENTER when you want to quit.

[2015.10.21 18:16:57] Press 'q' followed by ENTER when you want to quit.

Eigenartig das er dann genau da stehen bleibt und den Text immer wiederholt
Der Prozess läst sich auch nicht mit dem befehlt killproc Killen da der in der Prozessliste als mono steht statt mit den Namen in ${Pn}
« Letzte Änderung: 21. Oktober 2015, 18:36:10 von LucyDemoon »

Offline klesk

  • Held Mitglied
  • *****
  • Beiträge: 1194
  • Dankeschön: 142 mal
  • Desktop: herbstluftwm
  • Grafikkartentreiber: nvidia 3.40xx
  • Kernel: 4.2
  • Prozessor: Intel Core2 Quad Q9550 (-MCP-)
  • Skill: Durchschnitt
  • Zweig: unstable
Re: Shellscript Programm start&stop
« Antwort #3 am: 21. Oktober 2015, 19:42:35 »
Das mit dem killen kannst du z.b auch so angehen das du

kill $(pgrep -f Nova)
verwendest oder

kill $(pgrep -f mono)
(Mono ist natürlich dann unglücklich wenn man noch andere Mono-Anwendungen benutzt)

Weiß nicht, ob du unbedingt killproc nutzen möchtest.

Das mit dem Log geht natürlich gar nicht, da hast du schon recht, 2.5 GB innerhalb von paar Minuten. Aber wenn du das Error entfernst, schreibt er ja alles in eine Datei, dann wäre es auch etwas doppelt gemoppelt.
Mein Vorschlag wäre dann

mono WWServer.exe -name "${Sname}" -tcp "${Port}" -world "${Wname}" -localPath > ${log}/${FILE} 2>&1 &
Persönlich würde ich es getrennt machen, wie vorher, dann müsste die Meldung immer wieder überschrieben werden.
Oder hatte es nicht geklappt mit meinen ursprünglichen Änderungen ?


Offline LucyDemoon

  • Jr. Mitglied
  • **
  • Beiträge: 81
  • Dankeschön: 6 mal
    • Nova Arts
  • Desktop: KDE Plasma 5.X
  • Grafikkarte: NVIDIA GTX 1070
  • Grafikkartentreiber: nonfree
  • Kernel: 4.9LTS
  • Prozessor: Xeon E5-2630-v4 (10core)
  • Skill: Durchschnitt
  • Zweig: Stable
Re: Shellscript Programm start&stop
« Antwort #4 am: 21. Oktober 2015, 21:38:19 »
hey

Also das die Log Datei immer Überschrieben wird, das wird sie nicht. Sondern er schreibt Einfach nur weiter in die Log rein.
beim vorherigen Code hat er einfach 2 Dateien angelegt eonmal die .log und einmal mit .log.ERROR

EDIT:
Hab jetzt noch so ein Pfeil rein gemacht

Code: Bash
  1. mono WWServer.exe -name "${Sname}" -tcp "${Port}" -world "${Wname}" >> ${log}/${FILE} 2>&1

und das & entfernt da er mir nen Syntax Fehler ausgegeben hat, jetzt wird die Datei nicht mehr Größer, nachteil auch nicht mehr in denn Hintergrund geschoben.
Zitat
./ww.sh: line 34: syntax error near unexpected token `&'
./ww.sh: line 34: `        mono WWServer.exe -name "${Sname}" -tcp "${Port}" -world "${Wname}" > ${log}/${FILE} 2>>&1 &     


Ist es möglich wenn man es in den Hintergrund schiebt wieder Aufzurufen und einen Befehl einzugeben?

Ps: gibt es ne Dokumentation zu bash script? auf Deutsch?

Offline klesk

  • Held Mitglied
  • *****
  • Beiträge: 1194
  • Dankeschön: 142 mal
  • Desktop: herbstluftwm
  • Grafikkartentreiber: nvidia 3.40xx
  • Kernel: 4.2
  • Prozessor: Intel Core2 Quad Q9550 (-MCP-)
  • Skill: Durchschnitt
  • Zweig: unstable
Re: Shellscript Programm start&stop
« Antwort #5 am: 21. Oktober 2015, 22:02:06 »
Also deutsche Referenz finde ich eigentlich das Online-Buch am besten;

http://openbook.rheinwerk-verlag.de/shell_programmierung/

Kannst die Error-Meldungen natürlich auch nach /dev/null schicken, ist aber nicht die feine Art.

mono WWServer.exe -name "${Sname}" -tcp "${Port}" -world "${Wname}" -localPath > ${log}/${FILE} 2>/dev/null &
Nur werden dir so natürlich keine Fehler angezeigt. Warum er die Meldung so spammt ist weiß ich leider auch nicht.


Offline LucyDemoon

  • Jr. Mitglied
  • **
  • Beiträge: 81
  • Dankeschön: 6 mal
    • Nova Arts
  • Desktop: KDE Plasma 5.X
  • Grafikkarte: NVIDIA GTX 1070
  • Grafikkartentreiber: nonfree
  • Kernel: 4.9LTS
  • Prozessor: Xeon E5-2630-v4 (10core)
  • Skill: Durchschnitt
  • Zweig: Stable
Re: Shellscript Programm start&stop
« Antwort #6 am: 22. Oktober 2015, 01:50:20 »
Also deutsche Referenz finde ich eigentlich das Online-Buch am besten;

http://openbook.rheinwerk-verlag.de/shell_programmierung/

Kannst die Error-Meldungen natürlich auch nach /dev/null schicken, ist aber nicht die feine Art.

mono WWServer.exe -name "${Sname}" -tcp "${Port}" -world "${Wname}" -localPath > ${log}/${FILE} 2>/dev/null &
Nur werden dir so natürlich keine Fehler angezeigt. Warum er die Meldung so spammt ist weiß ich leider auch nicht.



Danke für den Link.

Das gespamme hab ich schon behoben hab einfach hier:    "localPath >> ${log}/${FILE} 2>>&1 &"    das Rot Markierte hinzugefügt leider musst ich da das & (Violett Makiert) am Ende entfernen wegen Syntax Fehler