Wie kann ich nach dem Booten einen Befehl ausführen?

27

Ich möchte den einfachen Shell-Befehl echo 1 > /proc/sys/kernel/sysrqbei jedem Start ausführen, um die sysrq-Schlüssel zu aktivieren. Wann sollte dies beim Booten durchgeführt werden und wo sollte ich ein Skript dafür ablegen?

Demi
quelle
Alle Linux-Distributionen stellen bereits die Uhrzeit ein. Möglicherweise ist die Batterie Ihrer RTC auf dem Motherboard schwach?
Einige Programmierer Kerl
@ JoachimPileborg tatsächlich gibt es keine RTC auf meinem Motherboard :) Es ist eine Embedded-Systemplatine ohne RTC.
2
Ich bitte um etwas anderes, @davidgo. Die Referenzen, die Sie zitieren, sind ein bisschen veraltet: Während Crontab funktioniert, funktioniert /etc/rc.local nicht auf systemdDistributionen wie Arch Linux. Wenn wir uns auf sie beziehen, könnten wir Demetri auf eine wilde Gänsejagd schicken. Manchmal müssen einige Aktualisierungen vorgenommen werden.
MariusMatutiae

Antworten:

37

Kommt auf Distributionen an.

Wenn Sie in von Debian abgeleiteten Distributionen arbeiten, gibt es mindestens zwei geeignete Stellen: /etc/rc.local und crontab. Sie können crontab als root aufrufen,

   crontab -e

und dann diese Zeile einfügen

   @reboot /home/my_name/bin/my_command

wo my_commandist eine ausführbare Datei ( chmod 755 my_command).

Alternativ können Sie eine Zeile wie diese platzieren

   /home/my_name/bin/my_command

in /etc/rc.local, und dies wird zuletzt ausgeführt. In jedem Fall erinnern sich pls daran, dass Sie eine Root-Umgebung verwenden, nicht Ihre. Auch aus diesem Grund ist es am besten, absolute Pfade zu verwenden.

Wenn Sie auf einem sind systemd Distro (Arch Linux, Fedora 19, ...) die erste Option (crontab) noch gültig ist , während die zweite (/etc/rc.local) nicht mehr existiert. In diesem Fall sollten Sie lernen, wie Sie einen Dienst starten, der ausgeführt werden systemctlsoll. Dies kann jedoch mehr sein, als Sie mit Ihrer einfachen Frage erwartet haben.

MariusMatutiae
quelle
1
Können Sie dies für Fedora bestätigen? Meine Suche sagt mir, dass rc.local immer noch ausgeführt wird, wenn es existiert und ausführbar ist, aber nicht standardmäßig eingerichtet ist. Ich habe beunruhigende Auswirkungen festgestellt, wenn rc.local nicht ausgeführt wird! (Ich konnte nur Referenzen für Fedora 18 finden - forums.fedoraforum.org/showthread.php?t=291889 )
Davidgo
Sie haben recht, in Fedora 19 haben Sie es vielleicht noch, wenn Sie es wirklich wollen. Aber es ist nicht mehr gepackt , docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… bullet 3.2.4. Außerdem gibt es es in Arch Linux überhaupt nicht, weshalb ich es für sicher hielt, eine Warnung darüber einzuschließen.
MariusMatutiae
2
Vielleicht ist dies ein unbekannter Alias ​​für mich, aber @bootes existiert nicht, nur @reboot debianhelp.co.uk/crontab.htm
Zarathustra
19

Wenn auf Ihrem System eine Version ausgeführt wird cron, die dies unterstützt (insbesondere Vixie cron), können Sie sie @rebootin einem Cron-Job verwenden.

Dies ist eine von 8 Sonderzeichenfolgen, die unterstützt werden.

Zitieren der crontab(5)Manpage (von meinem Ubuntu 12.04 System):

Anstelle der ersten fünf Felder kann eine von acht Sonderzeichenfolgen angezeigt werden:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

Bitte beachten Sie, dass der Start von cron (8)@reboot der Zeitpunkt ist, an dem der Dämon gestartet wird. Dies ist insbesondere möglich, bevor einige System-Daemons oder andere Einrichtungen gestartet wurden. Dies liegt an der Startreihenfolge der Maschine.

Dies ist bei weitem nicht die einzige Möglichkeit, etwas beim Booten auszuführen, aber es ist eine Alternative.

Keith Thompson
quelle
2
Wie kann diese Antwort mehr als ein Jahr vor der ursprünglichen Frage geschrieben worden sein?
MariusMatutiae
1
@MariusMatutiae meta.stackoverflow.com/q/294543/827263
Keith Thompson
+1 für die Angabe, dass Vixie Cron benötigt.
Javier Arias
10

Nahezu alle Linux-Varianten (die lange zurückreichen) haben eine Datei /etc/rc.local, die beim Start ausgeführt wird. Sie können den Befehl einfach hinzufügen.

Das heißt, Sie müssen das nicht einmal tun. Der "richtige" Weg wäre, die Zeile kernel.sysrq = 1 in /etc/sysctl.conf zu ändern / hinzuzufügen

Davidgo
quelle