Wie erstelle ich beim Start in Linux mehrere Bildschirmsitzungen?

Wie erstelle ich beim Start in Linux mehrere Bildschirmsitzungen?

Erstens: Was ist die beste Methode, um Befehle beim Start auszuführen, Cron? Kann ich suein Shell-Skript verwenden, um zwischen verschiedenen Benutzern zu wechseln, und wenn ja, wie?

Wie erstelle ich screenbeim Start mehrere getrennte Sitzungen? screen -A -m -d -S test ./script.shEs scheint, als ob es funktionieren sollte, aber wenn ich es in einem von cron gestarteten Skript verwende, werden nach dem Booten keine laufenden Bildschirmsitzungen angezeigt.

Es sieht so aus, als ob die Bildschirmsitzung geschlossen wird, nachdem der Befehl ausgeführt wurde. Kann ich sie geöffnet lassen, damit ich die Ausgabe sehen kann?

Danke!

Antwort1

Um einen Befehl beim Systemstart auszuführen, planen Sie ihn @rebootin cron ein. man 5 crontabWeitere Informationen finden Sie unter. Das bedeutet, dass Ihre Crontab-Zeile wie folgt aussehen sollte:

@reboot screen -m ...

Verwenden Sie sudafür nichts, sondern platzieren Sie den Befehl in der Crontab des Benutzers, der den Befehl ausführen soll. Auf diese Weise kann der Benutzer die Befehle ohne Eingriff von Root verwalten. (Wenn Sie jedoch einen Befehl als Systembenutzer ausführen möchten, ohne dass dieser Systembenutzer den Befehl aus Sicherheitsgründen ändern darf, wäre etwas wie su -c /path/to/command www-datain besser.)/etc/rc.local

Screen schließt ein Fenster, wenn sein Befehl beendet ist, und beendet die Sitzung, wenn das letzte Fenster geschlossen ist. Wenn Sie die Ausgabe des Skripts nach Abschluss sehen möchten, führen Sie danach einen weiteren Befehl aus, um auf die Eingabe zu warten. So lassen Sie beispielsweise das Fenster geöffnet, bis Sie Enterdarauf drücken:

screen sh -c './script.sh; read'

Denken Sie daran, dass screen nur eine begrenzte Anzahl von Verlaufszeilen speichert. Sofern nicht script.shmanchmal eine Interaktion erforderlich ist, sollten Sie die Ausgabe besser in eine Datei umleiten. Wenn eine Interaktion erforderlich ist, können Sie den logBefehl screen verwenden, um die Ausgabe in eine Datei zu senden (und dann ist es kein Problem, wenn die screen-Sitzung beendet wird, wenn keine Eingabe erforderlich ist).

Antwort2

Hast du es versucht screen -AmdS test bash -i ./script.sh?

Ich stelle mir vor, dass Folgendes passiert: Es startet screen, das das Skript ausführt, und wenn das Skript beendet wird, wird screen beendet. Der bash -iTeil weist screen an, bash im interaktiven Modus zu starten und dann bash das Skript ausführen zu lassen. Sobald das Skript ausgeführt wurde, wartet bash weiterhin an einer Eingabeaufforderung und hält die screen-Sitzung offen, damit Sie sich anmelden können, sobald Sie sich beim System anmelden.

Antwort3

Erstellen Sie ein Skript, das das tut, was Sie möchten. Wenn Sie nur für einen einzigen Befehl zwischen Benutzern wechseln, verwenden Sie su -c. Andernfalls erstellen Sie ein separates Skript und rufen Sie dieses auf.

Um den Befehl dann beim Start auszuführen, geben Sie den Befehl zum Ausführen des Skripts in/etc/rc.d/rc.local

verwandte Informationen