Uruchamianie polecenia przy starcie na crontab

24

Chciałem uruchomić polecenie na naszym systemie Linux po jego zrestartowaniu, widziałem, że można to zrobić przy użyciu crontab. Chciałem uruchomić to polecenie

sudo ifdown eth0 && sudo ifup -v eth0

na crontabie mogę po prostu zrobić:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

czy muszę to zapisać w skrypcie?

Dziękuję Ci

Lottie
źródło
7
Crontab wydaje się złym narzędziem do ponownego uruchomienia eth0. Dlaczego nie umieścić tego polecenia (bez sudo) w /etc/rc.local?
mikewhthing
Po co to zrobić? Te zadania są zwykle wykonywane automatycznie podczas procesu rozruchu i prawie NIGDY nie muszą być uruchamiane oddzielnie od automatycznych procesów rozruchu ...
Thomas Ward
1
@mikewh cokolwiek nie mogę obecnie głosować, ale chcę ci tylko podziękować za sugestię.
Lottie

Odpowiedzi:

34

Kilka uwag tutaj, zanim to zadziała:

  1. Nie używaj sudow pracy crona. Zamiast tego edytuj rootcrontab zamiast własnego, np. sudo crontab -eA następnie wprowadź polecenia bez sudo.
  2. Jak wspomniano @mikew, cokolwiek wspomniano, jest to dziwne użycie croni prawdopodobnie lepiej byłoby umieścić go /etc/rc.localprzed exit 0linią.
  3. Jeśli powiesz nam dokładnie, czego szukasz, możemy skierować Cię do opcji dziennika lub konfiguracji (ponowne uruchomienie usług sieciowych podczas uruchamiania wydaje się nieco hackerskie).
  4. W większości systemów @rebootpowinien również działać po silnym wyłączeniu lub awarii, ale istnieją różne implementacje crona, więc YMMV. Widziałem komentarze w różnych miejscach potwierdzające oba.

EDYCJA (2016/02/17): Usunięto nieprawidłowy napis na ścieżkach bezwzględnych; kudos @muru
EDYCJA (2016/10/17): Dodano notatkę zamknięcia
EDYCJA (2017/09/11): Zmieniona notatka zamknięcia. Nie jestem tego pewien.

TheSchwa
źródło
ok, chcę tylko wyjaśnić, powinienem napisać pełne polecenie etc/rc.localbez sudo. więc wtedy będzie tylko ifdown eth0 && sudo ifup -v eth0 wyjście 0
Lottie
cronużywa PATHpodanego w /etc/environment, który ma /sbin.
muru
Zrobiłem to, co @mikewh coś sugerowało i zadziałało. dziękuję
Lottie
1
@TheSchwa powinien być. Co najmniej od 12.04, /etc/pam.d/cronładuje pam_env, więc /etc/environmentnależy przeczytać i PATHużyć domyślnego zestawu. Ta odpowiedź została opublikowana tuż przed wydaniem 12.04.
muru
2
@TheSchwa Stwierdzenie, że ponowne uruchomienie crona nie działa przy zimnym rozruchu, jest błędne. Linie z restartem uruchamiane są podczas uruchamiania demona crond, kropka. Tak jest, czy to ciepły rozruch, zimny rozruch, czy też nie było rozruchu, a ja po prostu ręcznie zamknąłem crond i uruchomiłem go ponownie. Demon crond nie wie ani nie obchodzi go, dlaczego jest restartowany, po prostu uruchomi wiersze restartu, ilekroć to zrobi.
Kurt Fitzner
6

Możesz do tego użyć crontab, ale jeśli użyjesz sudo, będziesz potrzebował NOPASSWDreguły, sudoersaby to zrobić. (Zobacz Jak uruchomić zadanie cron za pomocą polecenia sudo .)

Łatwiej byłoby edytować /etc/rc.locali dodawać te polecenia przed exit 0wierszem.

muru
źródło