Gdzie umieścić cronjobs systemowe?

11

Jeśli potrzebuję cronjob, który działa na poziomie systemu (tj. Nie jest specyficzny dla określonego użytkownika), jak sugerujesz mi go utworzyć?

  1. działający crontab -ejako root
  2. dołączając do /etc/crontab
  3. tworzenie pliku definiującego cronjob /etc/cron.d/
  4. utworzenie pliku definiującego cronjob /etc/cron.*ly/(ale tylko jeśli taki przedział czasu odpowiada moim potrzebom)

Najbardziej martwi mnie to, które z tych rozwiązań zostaną prawdopodobnie zastąpione przez aktualizację systemu ?

Dodatkowo myślę, że jeśli zadanie jest długie, powinienem umieścić go w osobnym pliku skryptu , na przykład w /root/bin/. Czy sie zgadzasz?

niebieskawy
źródło
3
Należy podać, jakiej dystrybucji Unix lub Linux używasz.
jlliagre
Właśnie się uczę :) Myślałem, że to zachowanie niezależne od dystrybucji ...
niebieskawy

Odpowiedzi:

13

Nie używaj crontab -e

Nie umieściłbym tego crontab -ejako root. Jest to ogólnie mniej oczywiste dla innych administratorów i z czasem może się zgubić. Umieszczając je /etc/crontab, możesz dokładnie określić czas, w którym chcesz je uruchomić, a także możesz określić innego użytkownika.

Alternatywne lokalizacje

Jeśli nie zależy ci na uruchamianiu skryptu jako inny użytkownik i / lub chcesz, aby skrypt był uruchamiany co tydzień, codziennie itp., To kilka dystrybucji udostępnia katalogi, w których można umieścić skrypty, które będą automatycznie przetwarzane w określonym czasie.

Na przykład pod dystrybucjami opartymi na Redhat:

$ ls -dl /etc/cron*
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.d
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.daily
-rw-------. 1 root root    0 Nov 23 07:42 /etc/cron.deny
drwxr-xr-x. 2 root root 4096 Nov 29 11:03 /etc/cron.hourly
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.monthly
-rw-r--r--. 1 root root  457 Sep 26  2011 /etc/crontab
drwxr-xr-x. 2 root root 4096 Sep 26  2011 /etc/cron.weekly

Często umieszczam crony na poziomie systemu, w których chcę uruchomić w określonym czasie /etc/cron.dzamiast /etc/crontab, szczególnie jeśli są to bardziej złożone skrypty.

Wolę używać katalogów poniżej, /etc/cron*ponieważ są one o wiele bardziej oczywistym miejscem, o którym inni administratorzy systemu będą wiedzieć, a plikami tutaj można zarządzać za pomocą instalacji pakietów, takich jak rpmi / lub apt.

Ochrona wpisów

Dowolne z wymienionych przeze mnie katalogów są przeznaczone do umieszczania skryptów, które nie zostaną zniszczone przez menedżera pakietów. Jeśli martwisz się ochroną wpisu crontab, to na pewno nie umieściłbym go w /etc/crontabpliku, a zamiast tego umieściłbym go jako odpowiedni skrypt w jednym z /etc/cron*katalogów.

slm
źródło
1

Wybrałbym # 4. Pozwala to ustawieniom systemu wybrać, kiedy ma zostać uruchomione zadanie, i zazwyczaj wykonują dobrą pracę „uruchom, gdy nie jest zajęty”. Zmiana systemowego harmonogramu cron również automatycznie wpłynie na czas działania skryptu.

Wadą jest to, że nie masz bezpośredniej kontroli nad działaniem. Jeśli potrzebujesz bardziej bezpośredniej kontroli, użyj # 1.

1 jest najmniej prawdopodobne, że zostanie zastąpiony przez aktualizację systemu. Chociaż 3 i 4 powinny być całkiem bezpieczne. wszystko zależy jednak od sposobu aktualizacji. Twoja dystrybucja może być aktualizowana w dowolny sposób, ale tylko 2 zwykle grozi zastąpienie.

Wreszcie, umieściłbym skrypty w / usr / local / bin To jest „normalne” miejsce, w którym umieszczam rzeczy systemowe, które nie są zarządzane przez menedżera pakietów dystrybucji. / root / bin jest również dopuszczalny, jeśli będzie uruchamiany tylko przez root. Jednak to wszystko głównie smak.

Coteyr
źródło
0

Każde z powyższych będzie działać i żadne z powyższych nie powinno zostać zastąpione przez aktualizacje. Rzeczywisty wybór sprowadza się do opinii - dowolne trzy różne osoby często mają co najmniej dwie, jeśli nie trzy różne odpowiedzi.

Jan
źródło