Erstens: Was ist die beste Methode, um Befehle beim Start auszuführen, Cron? Kann ich su
ein Shell-Skript verwenden, um zwischen verschiedenen Benutzern zu wechseln, und wenn ja, wie?
Wie erstelle ich screen
beim Start mehrere getrennte Sitzungen? screen -A -m -d -S test ./script.sh
Es 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 @reboot
in cron ein. man 5 crontab
Weitere Informationen finden Sie unter. Das bedeutet, dass Ihre Crontab-Zeile wie folgt aussehen sollte:
@reboot screen -m ...
Verwenden Sie su
dafü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-data
in 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.sh
manchmal eine Interaktion erforderlich ist, sollten Sie die Ausgabe besser in eine Datei umleiten. Wenn eine Interaktion erforderlich ist, können Sie den log
Befehl 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 -i
Teil 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