Kilka lat temu skonfigurowałem zadanie cron, aby co minutę automatycznie pingowało adres URL jako część systemu monitorowania (to nadmierne uproszczenie, ale zrobi to w przypadku tego pytania). Ponieważ jestem okropną osobą, nigdzie tego nie udokumentowałem.
Dzisiaj, lata później, zacząłem mieć problemy z aplikacją na drugim końcu pingowanego adresu URL. Naprawiłem to, ale potem zdałem sobie sprawę, że nie mam pojęcia, skąd pochodzi ta praca crona .
Czy istnieje sposób na szybkie przeszukanie lub wyszukanie wszystkich plików crontabs w danym systemie? Mam dostęp do konta root, więc uprawnienia nie stanowią problemu. Byłem tylko użytkownikiem cron
, nigdy nie patrzyłem zbyt głęboko na jego implementację, ale moje instynkty * nix mówią, że musi istnieć gdzieś grupa plików tekstowych, które zawierają wszystkie crontabs. Po prostu nie wiem, gdzie byliby, a gdybym się w to zagłębił, bałbym się znaleźć niektóre, ale nie wszystkie, lub pominąć jakiś dziwny niuans systemu
Ponadto zdaję sobie sprawę z dostępu roota, że mogłem
- Uzyskaj listę wszystkich użytkowników w systemie
su
jako użytkownikcrontab -l
- Powtórz ze wszystkimi użytkownikami
ale szukam czegoś nieco mniej manualnego (i chcę dowiedzieć się czegoś o implementacji crona)
Odpowiedzi:
Jest tylko kilka miejsc, w których chowają się crontabs:
/etc/crontab
/etc/cron.d/*
/etc/crond.{hourly,daily,weekly,monthly}/*
są one wywoływane z
/etc/crontab
, więc może to oznaczać gwiazdkę/var/spool/cron/*
(czasami/var/spool/cron/crontabs/*
)Pamiętaj również o sprawdzeniu
at
, który utrzymuje swoje zadania w/var/spool/at/
lub/var/spool/cron/at*/
Również zamiast
Po prostu zrób to:
źródło
Crontabs żyją
/etc/crontab
i (z wieloma implementacjami) jego komponenty w/etc/cron.*/*
(wszystkie edytowane przez root) i w/var/spool/cron/*
(crontab użytkowników).Jeśli masz problemy ze zlokalizowaniem przestępczego zadania, innym podejściem jest zbadanie jednego w trakcie jego trwania. Na przykład można dodać regułę zapory, aby rejestrować identyfikator użytkownika procesu otwierającego połączenia
example.com
na porcie 80:Jeśli zadanie korzysta z aplikacji takiej jak
ping
lubcurl
, ukryj zwykły plik binarny przez opakowanie, które rejestruje informacje o tym, co z niego korzysta, za pomocą skryptu takiego jak ten w/usr/local/bin
:źródło
Szybki i brudny sposób:
Dokładna lokalizacja, w której przechowywane są pliki crontab, może różnić się w zależności od systemu, ale zazwyczaj
/var/spool
znajduje sięcrontab
w nazwie i ma ją gdzieś.Należy również pamiętać, że wiele systemów mają systemowych crontaby (jak w
/etc/crontab
,/etc/cron.d
), z których niektóre mogą wymagać więcej jak skrypty/etc/cron.hourly
,.daily
...źródło
To brzmi jak cronjob stworzony przez crontab. Nie wszystkie crontaby mają
-u
przełącznik, ale dla GNU / Linux jest dostępny. Jest to przydatna linia do wyświetlenia wszystkich cronjobs utworzonych przez crontab.(Uruchom jako root.)
źródło
Jeśli wszystko inne zawiedzie, możesz utworzyć plaster miodu z żądanego adresu URL - tzn. Podać duży plik lub coś - i poszukać procesu, który czeka na otrzymanie danych, a następnie sprawdzić jego identyfikator PPID.
źródło
Każdy porządny system powinien wyjaśniać dokładną lokalizację crontabs na stronie podręcznika (zwykle w
FILES
sekcji pod koniec, a także dla innych demonów).Na przykład w moim systemie
cron(8)
zawiera następujące elementy:Po drugie, radzę tylerlowi, by sprawdzał również oferty
at
pracy, gdy jesteś przy nim.źródło
Podejście do tego odwrotnie: cron prowadzi dziennik tego, co robi, właśnie po to, aby uniknąć tego rodzaju problemów. W moim systemie dziennik jest przechowywany
/var/cron/log
i wygląda następująco:Ta linia mówi mi, że instancja crona z PID 20232 na komputerze
fortress
wykonuje się/home/vucar/lighttpd-watchdog
w imieniu użytkownikavucar
. Dobrze zachowujący się system ma działający tylko jeden cron, więc będzie to proste.Działa to również w przypadku
at
zleceń, ponieważ i tak zwykle są one po prostu przekazywane do crona:Fragmenty pochodzą z systemu BSD, ale ogólna koncepcja jest prawdopodobnie taka sama wszędzie indziej.
źródło