Jak uruchomić zadanie cron tylko raz?


14

Mam pracę, która działa wiecznie od momentu jej rozpoczęcia. Więc chcę go uruchomić tylko raz po wprowadzeniu go do pliku „crontab -e” i zapisaniu go (lub) za każdym razem, gdy nastąpi restart.

Jak to osiągnąć?

Odpowiedzi:


22

Jeśli chcesz, aby uruchomić polecenie raz w późniejszym terminie, należy użyć atpolecenia.

Jeśli chcesz, aby polecenie było uruchamiane raz podczas uruchamiania systemu, poprawnym rozwiązaniem jest użycie:

  • systemowe skrypty RC (/etc/rc.local)
  • crontab ze @rebootspecjalnym prefiksem (patrz strona podręcznika)

Ta ostatnia jest jedyną opcją dla użytkownika innego niż root.


2
+1 za wzmiankę o @reboot.
— Alex Holst

Zawsze wolałbym używać /etc/rc.local, jeśli to możliwe ... Podejrzewam, że @reboot faktycznie uruchamia polecenia przy uruchamianiu crond, a nie przy uruchamianiu systemu. Subtelna, ale możliwa różnica.
— MikeyB

Załóżmy, że wpisałem @reboot "cmd ............." do pliku crontab i zapisałem go. Czy to polecenie uruchomi się teraz? (lub) Czy zaczyna się dopiero po ponownym uruchomieniu?
— Rama Vadakattu

Spróbuj i zobacz :) To, co prawdopodobnie będziesz musiał zrobić, to umieścić go w crontab, a następnie zaplanować natychmiastowe wykonanie przy użyciuat now
— MikeyB

Dobra odpowiedź. Zawsze o tym zapominam @reboot.
— Bill Weiss

9

Możesz użyć at (1), aby uruchomić zadanie w pewnym momencie w przyszłości. Jeśli jednak chcesz uruchomić coś przy starcie systemu i będzie on działał sam, być może potrzebujesz wpisu w /etc/init.d/? To pozwoli ci uruchomić go przy starcie systemu.


1
Możesz także użyć rc.local. Polecenia w /etc/rc.local "zostaną wykonane po wszystkich innych skryptach inicjujących. Możesz umieścić własne pliki inicjujące w rc.local, jeśli nie chcesz wykonywać pełnych rzeczy inicjujących w stylu Sys V."
— Joe

Joe: dobra rozmowa.
— Bill Weiss,

Jak zatrzymać proces rozpoczęty przez polecenie? (Wiem, że identyfikator procesu zabicia po obejrzeniu listy identyfikatorów procesu przy użyciu polecenia „ps” działa również w przypadku polecenia „na polecenie”). Czy tworzenie własnych skryptów jest łatwe?
— Rama Vadakattu

Tak dla obu. Wszystkie procesy można zatrzymać za pomocą kill(zakładając, że masz do tego uprawnienia, co robisz dla własnych procesów). Tworzenie skryptu inicjującego jest naprawdę łatwe. Poszukaj /etc/init.d/skryptu, który nie jest zbyt długi i wymodeluj go po nim lub google dla making init scripts (your distribution).
— Bill Weiss,

1
Wiele dystrybucji zawiera szkielet skryptu ( /etc/init.d/skeletonna openSuSE), który można dostosować do własnych potrzeb.
— MikeyB

3

Zadanie, które działa tylko raz i działa wiecznie, dopóki nie powiesz mu, że umrze, nazywa się „demonem”. Zwykle są uruchamiane za pomocą skryptów inicjujących w /etc/init.d/.

Jeśli twoje zadanie kończy się w którymś momencie i może być uznane za pracę jednorazową, możesz spojrzeć na polecenie at. Na przykład, jeśli chciałbym dziś wieczorem uruchomić polecenie find o 22:00 i tylko raz to zrobiłbym:

$ at 10PM
at> find /root > /root/find_results.list
at> <EOT>
job 3 at 2010-02-10 22:00

1

Spójrz na komendę at


co się stanie, gdy system zostanie zrestartowany? Czy ponownie muszę wpisać „na polecenie”?
— Rama Vadakattu,

Wpisy polecenia at nie zostaną utracone podczas ponownego uruchamiania. ibm.com/developerworks/linux/library/l-job-scheduling.html jest interesującym wprowadzeniem do planowania pracy
— Dominik

@Rama Vadakattu: „Wpisy komendy at nie zostaną utracone podczas ponownego uruchamiania.” ... które nie zostały jeszcze wykonane. Zobacz odpowiedź MikeyB .
— Wstrzymano do odwołania.

ok zrobię więcej badań na ten temat.
— Rama Vadakattu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.