Frage von KieranMeow, 48

Mehrere Terminals in Debian via script öffnen und befehl ausführen?

Hallo.

Wie kann ich mit einem script mehrere terminals mit zeitverzögerung öffnen und einen befehl ausführen?

Ich möchte in einem abstand von 360 sekunden den befehl

"ruby /home/pi/azuu/run.rb"

"ruby /home/pi/riley/run.rb"

usw in 10 terminals ausführen.

LG

Antwort
von Linuxhase, 34

Hallo

Wie kann ich mit einem script mehrere terminals mit zeitverzögerung öffnen und einen befehl ausführen?

Du meinst doch bestimmt mehrere Fenster einer Terminalemulation und nicht wirklich mehrere Terminals (von denen es ja "nur" sieben gib) oder?

Ich möchte in einem abstand von 360 sekunden den befehl

"ruby /home/pi/azuu/run.rb"
"ruby /home/pi/riley/run.rb"


ruby /home/pi/azuu/run.rb
sleep 330
ruby /home/pi/riley/run.rb




Linuxhase

Scheisz Editor hier :-)

Kommentar von LemyDanger57 ,

Hier gibt es einen Editor? ;-)

Kommentar von KieranMeow ,

Ja das meinte ich xD

Aber in was für eine Datei muss ich das denn schreiben? 

Kommentar von Linuxhase ,

@KieranMeow

Aber in was für eine Datei muss ich das denn schreiben?

Die Datei darfst Du nennen wie Du möchtest, in meinem Beispiel heißt sie meinscript.sh weil sich die Dateiendung *.sh als SHell Endung anbietet; aber zwingend nötig sind Dateiendungen nicht.

echo "ruby /home/pi/azuu/run.rb">>meinscript.sh
echo "sleep 330" >>meinscript.sh
echo "ruby /home/pi/riley/run.rb">>meinscript.sh
echo "exit 0">>meinscript.sh

Du könntest natürlich auch einfach:

nano meinscript.sh

im Terminal eingeben und dann die entsprechenden Zeilen hinein schreiben bzw. hinein kopieren.

Dann mit Strg+o speichern und mit Strg+x den Editor verlassen.

Die Datei, ist jetzt ein Script und muß noch ausführbar gemacht werden:

chmod +x meinsript.sh

Danach kannst Du das Script so starten:

./meinscript.sh

Du kannst dann zum Beispiel von dem Script so viele Symlinks anlegen wie Du möchtest und diese starten lassen.

Linuxhase

Kommentar von KieranMeow ,

Ich habe mich wohl falsch ausgedrückt. Das sind keine befehle die einmal ausgeführt werden. Das sind Bots die ohne zu stoppen weiter und weiter laufen. So sieht es normaler weise von Hand aus: http://puu.sh/mEvjv/7cd7e36e96.png

Ist das überhaupt möglich?

Kommentar von Linuxhase ,

@KieranMeow

Das sind keine befehle die einmal ausgeführt werden. Das sind Bots die ohne zu stoppen weiter und weiter laufen.

Ja und, es ist ein Kommando! - Ob damit ein Programm gestartet wird, ein Script ausgeführt wird oder eine Datei gelöscht wird oder sonstwas, spielt keine Rolle?!

Erkläre doch mal ganz genau was Du willst. Wann soll welches Kommando ausgeführt werden und soll überwacht werden ob es läuft, und falls nicht, soll es automatisch neu gestartet werden. Oder bestehen noch Abhängigkeiten die sich auf das Ausführen beziehen?

Linuxhase

Kommentar von KieranMeow ,

Oh. Hatte nicht gesehen dass du geantwortet hast.

Also ich hätte gerne ein script welches 9 Terminals startet und in jedem zwei Kommandos("cd [bot Verzeichnis z.b. my_ebooks/ oder azuu_ebooks/]" und "ruby run.rb") ausführt. Zwischen den unterschiedlichen terminals sollte wenn möglich ein 9 minuten delay sein.

  1. Terminal öffnen
  2. cd my_ebooks
  3. ruby run.rb
  4. Delay 9 min
  5. Terminal öffnen
  6. cd azuu_ebooks
  7. ruby run.rb
  8. Delay 9 min
  9. Terminal öffnen
  10. usw

Automatischer neustart bei crash wär gut. Das passiert öfters mal.

Das sieht dann so aus wenn ich das manuell schreibe und im 9 min abstand starte http://kool.noip.me/downloads/Unbenannt.png 

Kommentar von Linuxhase ,

@KieranMeow

Also ich hätte gerne ein script welches 9 Terminals startet

Echte Terminals oder meinst Du Terminalemulationen wie in Deinem Screenshot? - Und sollen darin auch wahlweise TABs angelegt werden, oder doch lieber gleich mit  screen arbeiten (empfohlen)?

Wieso hat Der Computer auf dem Du Dienste anbietest überhaupt eine grafische Oberfläche, die braucht man dafür definitiv nicht und könnte den Leistungsverbrauch mindern.

####################################################

             Kleines Tutorial zum CLI-Programm Screen

            ------------------------------------------------------------------

Der Aufruf von screen ist unspektakulär durch den Programmnamen in der Konsole:

screen

Üblicherweise lässt man innerhalb dieses Aufrufes gleich das zu übergebende Kommando mit einfließen:

screen journalctl -f

Nach dem Aufruf des Programms kann man die Screen-Session mit der Tastenkombination Strg+A Strg+D verlassen um die Shell wieder frei zu haben, das laufende Programm wird dadurch in den Hintergrund gelegt, ohne es zu beenden.

[detached from 17183.pts-3.openSUSE-Desk]

Damit hat man wieder die Shell für weitere Aufgaben offen, z.B.:

screen less /var/log/alternatives.log

Auch hier kann man sich mit Strg+A Strg+D wieder aus der Session
ausklinken.

[detached from 17192.pts-3.openSUSE-Desk]

Möchte man nun nachsehen welche Screen-Sessions gerade laufen, dann gibt es das Kommando screen -list oder screen -ls um alle laufenden Screen-Sessions aufzulisten, die Ausgabe wird etwa so aussehen:

screen -list
There are screens on:
17192.pts-3.openSUSE-Desk (Detached)
17183.pts-3.openSUSE-Desk (Detached)
2 Sockets in /run/uscreens/S-linuxhase.

Hat man nun aber 3, 4, 10 oder noch mehr Programme in Screen laufen, so wird es schwierig diese auseinander zu halten, da man nur die Session-ID hat,weshalb sich das Feature '-S' anbietet. Hiermit kann man der Screen-Session einen Namen verpassen um in daran identifizieren zu können - Aufruf:

screen -S LESS1 less /var/log/alternatives.log
screen -S JOURNALCTL journalctl -f

Woraufhin die Auflistung in der Art angezeigt wird:

screen -ls
There are screens on:
17183.JOURNALCTL (Detached)
17192.LESS1 (Detached)
2 Sockets in /run/uscreens/S-linuxhase.

Wenn man sich nun wieder in die Screen-Session einklinken möchte kann man dies mit dem Aufruf screen -r PID (oder Name)

screen -r 17183
screen -r LESS1

Dabei spielt es keine Rolle von wo aus man die Screen-Session gestartet hat, man kann die Session beispielsweise in der Firma starten und später im Büro zu Hause von dort aus öffnen.

Wenn man einer Screen-Session den Parameter -m mitgibt, wird diese als Multiuser-Session gekennzeichnet. Auf diese Art kann man andere User an der Screen-Session teilhaben lassen, z.B. als Alternative zu VNC oder Teamviewer.

Linuxhase

Keine passende Antwort gefunden?

Fragen Sie die Community