Jak mogę uruchomić polecenie po uruchomieniu?

27

Chciałbym uruchomić proste polecenie powłoki echo 1 > /proc/sys/kernel/sysrqprzy każdym uruchomieniu, aby włączyć klucze sysrq. Kiedy powinienem to zrobić i gdzie powinienem umieścić skrypt, aby to zrobić?

Demi
źródło
Wszystkie dystrybucje Linuksa już ustawiają czas. Może bateria w twoim RTC na płycie głównej jest rozładowana?
Jakiś programista koleś
@JachachPileborg faktycznie nie ma RTC na mojej płycie głównej :) To wbudowana płyta systemowa bez RTC.
2
Zaczynam się różnić, @davidgo. Referencje, które cytujesz, są nieco przestarzałe: podczas gdy crontab działa, /etc/rc.local nie działa na systemddystrybucjach takich jak Arch Linux. Odwołując się do nich, możemy wysłać Demetri na dziką gęś. Czasami trzeba trochę zaktualizować.
MariusMatutiae

Odpowiedzi:

37

Zależy od dystrybucji.

Jeśli korzystasz z dystrybucji wywodzącej się z Debiana, istnieją co najmniej dwa właściwe miejsca: /etc/rc.local i crontab. Możesz wywołać crontab jako root,

   crontab -e

a następnie wstaw tę linię

   @reboot /home/my_name/bin/my_command

gdzie my_commandjest plik wykonywalny ( chmod 755 my_command).

Alternatywnie możesz umieścić taką linię

   /home/my_name/bin/my_command

w /etc/rc.local, a to zostanie wykonane jako ostatnie. W każdym razie, pls pamięta, że ​​używasz środowiska root, a nie twojego. Również z tego powodu najlepiej jest używać ścieżek bezwzględnych.

Jeśli korzystasz z dystrybucji systemowej (Arch Linux, Fedora 19, ...) pierwsza opcja (crontab) jest nadal aktualna, a druga (/etc/rc.local) już nie istnieje. W takim przypadku powinieneś nauczyć się, jak uruchomić usługę, która ma być obsługiwana systemctl, ale może to być więcej niż można się spodziewać po tym prostym pytaniu.

MariusMatutiae
źródło
1
Czy możesz to potwierdzić dla Fedory? Moje wyszukiwanie mówi mi, że rc.local będzie nadal działać, jeśli istnieje i jest wykonywalny, ale nie jest domyślnie skonfigurowany. Dostrzegłem niepokojące konsekwencje, jeśli rc.local nie działa! (Mogłem znaleźć tylko odniesienia do tego dla Fedory 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo
Masz rację, w Fedorze 19 możesz go nadal mieć, jeśli naprawdę tego chcesz. Ale nie jest już zapakowany, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… punktor 3.2.4. Ponadto, nie istnieje on całkowicie w Arch Linux, więc pomyślałem, że bezpiecznie jest dołączyć ostrzeżenie o tym.
MariusMatutiae
2
może jest to dla mnie nieznany alias, ale @bootnie istnieje, po prostu @reboot debianhelp.co.uk/crontab.htm
Zarathustra
19

Jeśli twój system działa w wersji, cronktóra go obsługuje (w szczególności Vixie cron), możesz użyć go @rebootw zadaniu cron.

Jest to jeden z 8 obsługiwanych ciągów specjalnych.

Cytując crontab(5)stronę podręcznika (z mojego systemu Ubuntu 12.04):

Zamiast pierwszych pięciu pól może pojawić się jeden z ośmiu ciągów specjalnych:

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 * * * *".

Pamiętaj, że jeśli chodzi o uruchamianie, @rebootto czas uruchamiania demona cron (8) . W szczególności może to nastąpić przed uruchomieniem niektórych demonów systemu lub innych obiektów. Wynika to z sekwencji kolejności rozruchu maszyny.

Nie jest to jedyny sposób, aby uruchomić coś podczas rozruchu, ale jest to alternatywa.

Keith Thompson
źródło
2
Jak tę odpowiedź można napisać ponad rok przed pierwotnym pytaniem?
MariusMatutiae
1
@MariusMatutiae meta.stackoverflow.com/q/294543/827263
Keith Thompson
+1 za określenie, która wymaga Vroniego crona.
Javier Arias,
10

Prawie wszystkie warianty Linuksa (od długiego, długiego czasu) mają plik /etc/rc.local, który działa podczas uruchamiania - możesz po prostu dodać do niego polecenie.

To powiedziawszy, nawet nie musisz tego robić. „Poprawnym” sposobem byłoby zmodyfikowanie / dodanie wiersza kernel.sysrq = 1 do pliku /etc/sysctl.conf

Davidgo
źródło