Benutzer beim Booten automatisch bei TTY anmelden und dann Befehl automatisch im GNU-Bildschirm ausführen

Benutzer beim Booten automatisch bei TTY anmelden und dann Befehl automatisch im GNU-Bildschirm ausführen

Ubuntu 14.04.5 LTS

Gewünschte Funktionalität: Der Remote-Ubuntu-Server bootet und startet automatisch einen laufenden Prozess als angegebener Benutzer. Ich kann mich dann zu einem späteren Zeitpunkt remote anmelden und die vergangene und aktuelle Bildschirmausgabe des laufenden Prozesses anzeigen.

Derzeitiger Plan:

Automatisierte Schritte:

  1. Der Benutzer „ubuntu“ wird beim Booten automatisch bei einem Terminal (TTY) angemeldet:

    "sudo nano /etc/init/tty1.conf"
    
    Change: exec /sbin/getty -8 38400 tty1
    
    To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
    
  2. Der Benutzer „ubuntu“ führt den GNU-Bildschirm aus:

    screen -d -m -S screenname
    
  3. Der Benutzer „ubuntu“ führt den laufenden Prozess innerhalb des GNU-Bildschirms aus:

    screen -S screenname -p 0 -X stuff "command^M"
    

Manuelle Schritte zu einem späteren Zeitpunkt:

  1. Ich melde mich remote als Benutzer „ubuntu“ in einem anderen Terminal (TTY) an.
  2. Ich füge die Verbindung zur in Schritt 2 gestarteten GNU-Bildschirmsitzung wieder her:

    screen -r
    
  3. Ich kann die bisherige und aktuelle Ausgabe des in Schritt 3 gestarteten Prozesses anzeigen.

Fragen:

  • Ist dies der effektivste Weg, um das gewünschte Ergebnis zu erzielen?
  • Wie können die Befehle in Schritt 2 und 3 automatisiert werden?
  • Wie können die Befehle in Schritt 2 und 3nichtaktivieren, wenn ich mich in Schritt 4 manuell anmelde?

Antwort1

Antworten(zu meinen eigenen Fragen)

  • Ist dies der effektivste Weg, um das gewünschte Ergebnis zu erzielen?
    Ich bin mir immer noch nicht sicher, ob die folgenden Lösungen am effektivsten sind, aber ich kann bestätigen, dass sie zumindest auf der angegebenen Version unter Ubuntu funktionieren.
  • Wie können die Befehle in Schritt 2 und 3 automatisiert werden?
  • Wie können die Befehle in Schritt 2 und 3 nicht aktiviert werden, wenn ich mich in Schritt 4 manuell anmelde?

    Schritt eins
    Ich habe Folgendes am Ende der .profile-Datei im Benutzerverzeichnis des Benutzers eingefügt, der während Schritt 1 oben automatisch angemeldet wurde (/home/ubuntu/.profile):

    pgrep processname || /home/ubuntu/processscript.sh
    

    Wenn der Benutzer automatisch angemeldet wird, wird dieser Befehl automatisch ausgeführt, da er sich in .profile befindet. Der erste Teil des Befehls (vor dem „||“) prüft, ob „Prozessname“ bereits ausgeführt wird. Wenn nicht, wird der zweite Teil des Befehls (nach dem „||“) ausgeführt, d. h. „processscript.sh“ … Wenn „Prozessname“ bereits ausgeführt wird, wird er nicht ausgeführt.

    Diese Prüfung war notwendig, da der Prozess, den ich ausführen wollte, nicht mehrere Instanzen gleichzeitig ausführen konnte. Außerdem löst sie das Problem, dass der Prozess ein zweites Mal ausgeführt wird, wenn ich mich später manuell anmelde.

    Schritt zwei
    Erstellen Sie eine Shell-Skriptdatei namens „processscript.sh“ mit folgendem Inhalt:

    #!/bin/bash
    screen -d -m -S screenname &&
    screen -S screenname -p 0 -X stuff "/home/ubuntu/command.sh^M"
    

    Stellen Sie sicher, dass sich „processscript.sh“ im Verzeichnis /home/ubuntu befindet und mit dem folgenden Befehl ausführbar ist:

    chmod 744 processscript.sh
    

    Das obige Shell-Skript erstellt eine Bildschirminstanz mit dem Namen „screenname“ und füllt, wenn es erfolgreich abgeschlossen wird, die Befehlszeile dieser Bildschirminstanz mit dem Befehl „command.sh“ mit einem Wagenrücklauf (was das „^M“ am Ende bewirkt).

    Schritt drei
    Im vorherigen Schritt stieß ich auf einige Probleme, als ich einen Befehl mit Attributen in die Bildschirmbefehlszeile einfügte (ich glaube, es waren einige Zeichen-Escapes erforderlich). Um dies einfach zu lösen, habe ich den vollständigen Befehl mit Attributen zu einem Shell-Skript hinzugefügt und dieses stattdessen verwendet. Erstellen Sie daher ein weiteres Shell-Skript (wie oben) mit dem Namen „command.sh“ und fügen Sie den vollständigen Befehl dort ein.

verwandte Informationen