Planowanie pracy za pomocą crontab, co się stanie, gdy komputer zostanie wyłączony w tym czasie?

85

Niektóre zadania planuję za pomocą crontab.

Co się stanie, jeśli mój komputer zostanie zamknięty lub wyłączony w czasie, gdy cron miał coś zrobić?

Czy każde pominięte zadanie cron jest uruchamiane po włączeniu komputera, czy też ignorowane zadania tego dnia są ignorowane? Jeśli pominięte zadania nie zostaną wznowione, czy istnieje sposób na skonfigurowanie crona tak, aby uruchamiał pominięte zadania po ponownym włączeniu komputera?

seg.server.fault
źródło
3
Próbowałem znaleźć tutorial anakronowy w sieci, ale nie mogłem znaleźć żadnych dobrych. Przeglądanie stron podręcznika również mi nie pomogło. Jak mogę zmienić istniejący crontab, aby zmienił się w anacron? Lub każdy tutorial w tym będzie bardzo pomocny
seg.server.fault
1
Zredagowałem swoją odpowiedź, aby uwzględnić kilka przykładów. Mam nadzieję że to pomogło!
jeff

Odpowiedzi:

70

Gdy komputer zostanie zamknięty (lub demon cron w innym przypadku nie byłby uruchomiony), zadania cron nie zostaną uruchomione.

Jeśli masz zadania, które chcesz uruchomić po fakcie w czasie, gdy komputer jest wyłączony, użyj anakronu. Zainstalowane domyślnie, zobacz „man anacron”, „man anacrontab” lub plik / etc / anacrontab, aby uzyskać więcej informacji.

Ubuntu domyślnie używa anacrona do wpisów crontab w:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

pozostawiając pozostałe crontabs do obsługi przez głównego demona cron, w szczególności:

/etc/crontab
/etc/cron.d
/var/spool/cron

UWAGI

Sam Anacron nie działa jako demon, ale polega na skryptach startowych systemu i na uruchamianiu samego crona.

Na polu Ubuntu 8.04, na który patrzę, /etc/init.d/anacron jest uruchamiany przy starcie systemu, i ponownie przez crona każdego ranka o 07:30.

Plik README na /usr/share/doc/anacron/README.gz zawiera nieco więcej informacji niż jest to zawarte na stronach podręcznika.

PRZYKŁADY

W przypadku prostych zadań „codziennych”, „cotygodniowych”, „miesięcznych” umieść kopię lub dowiązanie symboliczne do skryptu w jednym z katalogów /etc/cron.{daily|weekly|monthly} powyżej. Anacron zajmie się uruchamianiem go codziennie / co tydzień / co miesiąc, a jeśli komputer jest wyłączony w dniu, w którym normalnie uruchamiane byłyby „cotygodniowe” skrypty, uruchomi je przy następnym uruchomieniu komputera.

Jako kolejny przykład, zakładając, że masz tutaj skrypt: /usr/local/sbin/maint.sh

I chcesz uruchamiać go co trzy dni, standardowy wpis w / etc / crontab wyglądałby tak:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Jeśli komputer nie był włączony o godzinie 00:00 3 dnia miesiąca, zadanie nie uruchomiłoby się przed 6 dniem.

Aby zamiast tego uruchomić zadanie na 4, gdy komputer jest wyłączony i „pominie” uruchomienie na 3, użyj tego w / etc / anacrontab (nie zapomnij usunąć linii z / etc / crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

„Opóźnienie” powyżej „5” oznacza, że ​​anakron będzie czekał 5 minut, zanim uruchomi to zadanie. Chodzi o to, aby uniemożliwić anakronowi odpalenie rzeczy natychmiast po uruchomieniu.

Jeff
źródło
5
Domyślnie Ubuntu używa anakronu.
3dinfluence
1
dzięki, 3dincluence - poprawiona odpowiedź wskazująca, które pliki crontab są obsługiwane przez anakron w domyślnym zestawie narzędzi Ubuntu.
jeff
2
jeśli umieścisz skrypt w /etc/cron.*/ zamiast własnego wpisu crontab, nie będziesz miał „.” w nazwie pliku skryptu. debian i ubuntu używają części run do uruchamiania takich skryptów, a domyślnie części run ignorują pliki z. w nazwie pliku - jest tak, aby nie uruchamiał wersji skryptów .dpkg-old i .dpkg-dist, których nazwy zostały zmienione z aktualizacji. więc nazwij skrypt lub dowiązanie symboliczne „keep” zamiast „maint.sh”.
cas
OpenSUSE domyślnie używa cronie od wersji 11.2 (do Tumbleweed / Leap 42.2). Aby użyć anacron, zainstaluj cronie-anacronpakiet.
palswim
13

Zależy to od używanego harmonogramu cron. Podstawowy, waniliowy demon cron nie uruchomi zadań, które zostały pominięte z powodu przestoju systemu. Istnieją jednak inne harmonogramy cron specjalnie zaprojektowane dla tej sytuacji, które zrobią to za Ciebie. Dwie najczęstsze przykłady anacron i fcron .

Tyler McHenry
źródło
5

Zadania zaplanowane przy wyłączonym komputerze nie będą uruchamiane po ponownym włączeniu komputera

Alan H.
źródło
2

Jeśli zamkniesz się podczas działania zadań cron, system zostanie zamknięty, a zadania cron zatrzymane (lub nie uruchomione).

Jedną z możliwości, które możesz sprawdzić, jest anakron.

KPWINC
źródło
2

Naprawdę zależy od uruchomionego crona deamon. Vixie-cron po prostu pominie cronjobs, które zostały pominięte. fcron będzie eksploatowany brakowało crons tak szybko, jak to możliwe. IIRC jest również oparty na vixie-cron, więc jeśli tego właśnie szukasz, możesz sprawdzić fcron.

gregf
źródło