Parameter richtig an Programm übergeben

  • Ich möchte beim Booten in crontab ein Script aufrufen das unter Mono ein Programm mit einem Parameter startet, der beim Aufruf im crontab mitgegeben wird. Vom Programm sollen mehrere Instanzen mit unterschiedlichen Parametern gestartet werden, wobei jede Instanz in einem benannten Fenster in einer bestimmten TMUX Session gestartet wird. Jedes Programm startet in einem eigenen Unterverzeichnis wo sich auch die dazugehörenden Daten und Add-Ons befinden.

    Meine Zeilen im crontab sehen dann etwa so aus:

    Code
    # tmux session mit dem Namen term und einem Bash Fenster starten.
    # Die default-shell (/bin/bash) ist bereits in ~/.tmux.conf definiert.
    @reboot sleep  10 && tmux new-session -d -s term -n bash
    #
    # Simulatoren im Abstand von mindestens 3 Sekunden starten
    @reboot sleep  12 && ~/scripts/start_sim sim1
    @reboot sleep  15 && ~/scripts/start_sim sim2

    ~/scripts/start_sim sieht auf die wesentlichen Teile reduziert wie folgt aus:

    Bash
    #!/bin/bash
    #
    simulator="$1"
    cd "$HOME"/"$simulator"/bin
    tmux new-window -d -t term -n "$simulator" 'mono Simulator.exe -sim=$simulator'

    Was ich möchte ist, dass durch den Aufruf von ~/scripts/start_sim sim1 die letzte Zeile so aufgelöst wird, wie wenn ich sie manuell eingeben würde:

    Code
    tmux new-window -d -t term -n sim1 'mono Simulator.exe -sim=sim1'

    Bis auf den Teil -sim=$simulator funktioniert dies auch perfekt. Ich habe ohne Erfolg alles mögliche versucht, das richtig aufzulösen.

    Das vollständige Script macht noch mehr. Es überwacht alle 30 Sekunden die Prozesse und startet den gestarteten Prozess neu, falls er abgeschmiert ist. Falls es jemand interessiert, dann ist das vollständige Script als Text-File im Anhang zu finden.

  • Tja, hab ich mir gedacht. "könnte" ist gut ;) Irgendwie wollte das "escapen" in diesem Kontext nicht so wie ich.

    Ich bin jetzt an einem neuen Ansatz und werde in jedes der Verzeichnis ein Start-Script legen, das ich dann aufrufe. Der Parameter ist dann fix drin.

  • Igitt ;)

    Was hast du probiert und welche Fehlermeldung gab es?

    Probiers mal damit:

    Code
    simulator=$1
    cd $HOME/$simulator/bin
    tmux new-window -d -t term -n $simulator "mono Simulator.exe -sim=$simulator"


    Oder:

    Code
    simulator=$1
    cd $HOME/$simulator/bin
    tmux new-window -d -t term -n $simulator \'mono Simulator.exe -sim=$simulator\'


    Oder:

    Code
    simulator=$1
    cd $HOME/$simulator/bin
    tmux new-window -d -t term -n $simulator "\'mono Simulator.exe -sim=$simulator\'"
  • Servus,
    also ... das sollte schon so funktionieren.

    Wenn ich das as bash-script

    Zitat


    #!/bin/bash
    #
    simulator="$1"
    echo "$HOME"/"$simulator"/bin
    echo "tmux new-window -d -t term -n \"$simulator\" 'mono Simulator.exe -sim=$simulator'"

    erstelle, das ausführbar mache und auf meinem Ubuntu Laptop ausführe, passiert folgendes:

    Und auf einem Raspi mit aktuellem Raspbian:

    Da scheint ein anderes Problem zu bestehen (evtl., wie meigrafd schon vermutet hat, was mit den Pfaden).

    cu,
    -ds-

  • Sorry, ich weiss auch nicht was ich da anfangs vermurkst habe. Es gab eben gar keine Fehlmeldung, mein Parameter wurde einfach nie richtig aufgelöst und leer oder falsch übergeben.

    Einfach die beiden "single"-Quotes weg und gut war's.

    Funzt jetzt alles wunderbar. Am Monitoring muss ich noch feilen. Meine Logik mit den Kontrolldateien ist etwas primitiv, erfüllt aber den Zweck, d.h. wenn ich einen Prozess abschalten will, vorher die dazugehörende .run-<name> Datei löschen und der Prozess wird nach dem Killen nicht mehr gestartet.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!