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ąć?

Rama Vadakattu
źródło

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.

MikeyB
źródło
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.

Bill Weiss
źródło
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
CarpeNoctem
źródło
1

Spójrz na komendę at

Dominik
źródło
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