Ein Skript wird beim Booten ausgeführt, nicht beim Anmelden

11

Wie kann ich ein bestimmtes Skript ausführen lassen (vorzugsweise nicht als Superuser), wenn der Computer startet, aber bevor ich mich anmelde? Es kann das letzte sein, was beim Booten ausgeführt wird. Ich möchte meistens nur, dass das Skript funktioniert, auch wenn sich kein Benutzer anmeldet.

Malabarba
quelle
1
@ Bruce werfen Sie einen Blick darauf -> askubuntu.com/questions/9382/…
hhlp
1
Sie können Upstart oder Cron oder wahrscheinlich eine ganze Reihe anderer Methoden verwenden. Eine wichtige Sache zu wissen ist auch, wie früh es laufen kann . Muss beispielsweise ein bestimmtes Dateisystem bereitgestellt werden, muss X ausgeführt werden, muss DBus ausgeführt werden, muss ein Netzwerk vorhanden sein - oder allgemeiner: Benötigt es Ressourcen, um vorhanden zu sein?
Januar
@JanC: Ja, eigentlich braucht es fast alles, was Sie gefragt haben (außer X), weshalb ich möchte, dass es das allerletzte ist, was ausgeführt wird. Es gibt auch keinen Grund, es früher auszuführen.
Malabarba
@hhlp: Cool, danke. Aber wie früh wird das Skript ausgeführt, wenn ich diese Methode verwende? Wie oben erwähnt, ist es am besten, wenn es eines der allerletzten Dinge ist (vor dem Anmelden).
Malabarba
Nun, für die Anmeldung ist kein Netzwerk erforderlich, es sei denn, Sie möchten sich bei einem Terminalserver anmelden und / oder Sie haben Ihr $ HOME auf einer Netzwerkfreigabe ... ;-)
Januar

Antworten:

8

Ich würde empfehlen, zu verwenden cron. Der spezielle Zeitwert von erzeugt @rebootIhren Job bei jedem Neustart als Benutzer. Führen Sie beispielsweise Folgendes aus crontab -eund verwenden Sie:

@reboot /home/yourself/bin/some_script_to_run

Weitere Einzelheiten zu den speziellen Zeitformaten finden Sie unter man 5 crontab

Kees Cook
quelle
Danke, es scheint einfach genug. Dies hängt nicht davon ab, welcher Benutzer den Cronjob erstellt, oder? Es läuft am Ende des Startvorgangs unabhängig von Anmeldungen?
Malabarba
Es hängt absolut davon ab, wer den Cronjob erstellt hat - er wird als dieser Benutzer ausgeführt. Aber es hängt nicht davon ab, ob sie angemeldet sind.
Kees Cook
Beachten Sie, dass das Skript beim Starten des Cron-Daemons ausgeführt wird, sodass möglicherweise andere Systeme, die Sie benötigen, noch nicht bereit sind.
PhoneixS
4

Eine Möglichkeit ist die Verwendung von Upstart. Auf diese Weise können Sie angeben, wann Sie Ihr Skript in Bezug auf Abhängigkeiten ausführen möchten, z. B. "Wenn die Dateisysteme bereitgestellt sind und die Netzwerkschnittstelle aktiv eth0ist". Erstellen Sie eine Datei /etc/init/bruce_script.conf(Sie müssen die Datei als Root erstellen), die Folgendes enthält:

description "Bruce's boot script"
start on filesystem and net-device-up IFACE=eth0
task
exec su -c '/home/bruce/script' bruce

Weitere Informationen finden Sie in der Upstart- Dokumentation, insbesondere auf der init(5)Handbuchseite. Dort finden Sie eine Liste der Elemente, die Sie in diese Konfigurationsdatei einfügen können.

Gilles 'SO - hör auf böse zu sein'
quelle
Gibt es eine Liste von Upstart-Ereignissen, die verwendet werden können?
Sunside
@ Markus: nicht das ich wüsste. Standardereignisse haben eine Handbuchseite in Abschnitt 7 (so dpkg -L upstart |grep /man7/), und Sie können Ereignisse anzeigen, die von vorhandenen Skripten in ausgegeben und als Auslöser verwendet werden /etc/init.
Gilles 'SO - hör auf böse zu sein'