Wer sein System permanent überwacht, hat den Grundstein dafür gelegt Engpässe zu vermeiden und Fehler frühzeitig zu erkennen. Neben dem Platzhirsch Nagios ... (mehr)

Alles wie Top

Das Unix-Komando »top« ist einer dieser Befehle, die nicht nur einmal ein Ergebnis ausgeben, sondern so lange laufen und ihre Daten anzeigen, bis der Anwender sie beendet. Die Expect-Anweisung »loop« ermöglicht es, jeden beliebigen Befehl mit diesen Fähigkeiten auszustatten. Sie startet einen Befehl immer wieder neu, bis der Anwender ihn mit einem Tastendruck beendet. Zu Beginn legt das Skript in Listing 5 den auszuführenden Befehl und das Zeitintervall fest, in dem die Anzeige aktualisiert wird (die hier dem Expect-Timeout entspricht).

Listing 5

Schleife (Teil 1)

 

An diesem Beispiel kann man sehen, wie sich über die If-Anweisung von Tcl das Vorhandensein eines Kommandozeilenarguments prüfen lässt. Die Send-Anweisung gibt eine Fehlermeldung aus, wenn das obligatorische Argument fehlt. Solange nicht mit Spawn ein Prozess gestartet wurde, bezieht sich Send auf die Standardein-/ausgabe des Skriptes und kann also dafür verwendet werden, Meldungen auszugeben. Wie in Zeile 5 zu sehen ist, muss man die eckigen Klammern in der Ausgabe mit Backslashes escapen, weil sie in Tcl sonst eine spezielle Bedeutung besitzen. Das zweite Argument des Skriptes ist optional und gibt das Zeitintervall an, in dem es die Ausgabe auffrischt, per Default fünf Sekunden. In Zeile 10 wird die Timeout-Variable auf diesen Wert gesetzt.

Geschleift

Der in Listing 6 abgedruckte Rest des Skriptes führt den Kommandozeilenbefehl aus und wartet dazwischen auf den Tastendruck des Anwenders. Die Variable »done« erhält den Wert 0, und vor der While-Schleife schaltet Stty die Ausgabe ab. Die While-Schleife wird wiederholt, solange »done« gleich 0 ist. Im While-Block führt Expect mit »system« zwei externe Unix-Kommandos aus. Anders als »spawn« führt »system« ein Kommando aus, ohne die Ein- und Ausgabe zu übernehmen.

Listing 6

Schleife (Teil 2)

 

Wird das vom Benutzer spezifizierte Unix-Kommando ausgeführt, setzt das Skript das Terminal mit Stty in den Raw-Mode. Somit verarbeitet es Benutzereingaben Zeichen für Zeichen statt zeilenweise. Das dazugehörige Expect-Statement wartet mit einer Regular Expression auf ein beliebiges Zeichen. Tritt dieses Ereignis ein, setzt das Skript die Variable »done« auf 1, und beim nächsten Durchlauf endet die Schleife. Im Fall eines Timeouts passiert nichts, und »done« bleibt unangetastet. Nach dem Ende der While-Schleife setzt das Skript das Terminal zurück und endet dann.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023