Czy istnieje polecenie lub istniejący skrypt, który pozwoli mi jednocześnie wyświetlić wszystkie zaplanowane zadania Crona systemu * NIX? Chciałbym, aby obejmowało wszystkie crontabs użytkownika, a także /etc/crontab
cokolwiek w nim jest /etc/cron.d
. Byłoby również miło widzieć konkretne polecenia uruchamiane przez run-parts
w /etc/crontab
.
Idealnie, chciałbym otrzymać wynik w ładnej formie kolumny i uporządkować w jakiś znaczący sposób.
Mógłbym następnie scalić te wykazy z wielu serwerów, aby wyświetlić ogólny „harmonogram wydarzeń”.
Już miałem napisać taki scenariusz, ale jeśli ktoś już zadał sobie trud ...
Odpowiedzi:
Będziesz musiał uruchomić to jako root, ale:
zapętli każdą nazwę użytkownika, wyliczając ich crontab. Crontabs są własnością odpowiednich użytkowników, więc nie będzie można zobaczyć crontaba innego użytkownika bez niego lub roota.
Edytuj, jeśli chcesz wiedzieć, do którego użytkownika należy crontab, użyj
echo $user
źródło
for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
for user in $(getent passwd | awk -F : '{print $1}'); do echo $user; crontab -u $user -l; done
/etc/cron.hourly/
,/etc/cron.daily/
,/etc/cron.weekly/
,/etc/cron.monthly/
...?Skończyło się na pisaniu scenariusza (staram się nauczyć najdokładniejszych aspektów pisania bashów, dlatego nie widzisz tutaj czegoś takiego jak Perl). To nie do końca prosty romans, ale robi większość tego, czego potrzebuję. Wykorzystuje sugestię Kyle'a dla patrząc crontaby indywidualnych użytkowników, ale również zajmuje się
/etc/crontab
(w tym skrypty uruchamiane przezrun-parts
w/etc/cron.hourly
,/etc/cron.daily
itp) i pracy w/etc/cron.d
katalogu. Pobiera wszystkie z nich i łączy je w wyświetlacz podobny do następującego:Pamiętaj, że pokazuje użytkownika i mniej więcej sortuje według godziny i minuty, dzięki czemu mogę zobaczyć dzienny harmonogram.
Do tej pory testowałem to na Ubuntu, Debian i Red Hat AS.
źródło
<' showcrons.sh: line 59:
wykonano <<(cut --fields = 1 --delimiter =: / etc / passwd) '/etc/anacrontab
W systemie Ubuntu lub debian możesz wyświetlić crontab,
/var/spool/cron/crontabs/
a następnie plik dla każdego użytkownika. Oczywiście dotyczy to tylko crontab specyficznych dla użytkownika.W przypadku Redhat 6/7 i Centos crontab jest poniżej
/var/spool/cron/
.źródło
/etc/passwd
. IMO powinna to być zaakceptowana odpowiedź, a nie wszystkie brutalne rozwiązania.Spowoduje to wyświetlenie wszystkich wpisów crontab od wszystkich użytkowników.
źródło
Zależy od twojej wersji Linux, ale używam:
jako root. Bardzo prosty i bardzo krótki.
Daje mi dane wyjściowe takie jak:
źródło
tail -n +1 /var/spool/cron/*
do wyświetlania całej zawartości plików.sudo sh -c 'tail -n +1 /var/spool/cron/*'
jeśli nie chcesz zostać rootem. Mój OCD zmusił mnie do zbadania, dlaczego nie mogłem sudo wykonać tego polecenia tak, jak napisano. Stało się tak, ponieważ zwykli użytkownicy nie mają dostępu do katalogu / var / spool / cron dir, a glob był interpretowany jako dosłowna postać gwiazdy, która oczywiście nie istnieje.cd /var/spool/cron/cron/ && grep . *
wydrukuje również odpowiednią nazwę użytkownika przed każdym zadaniem cronaMałe udoskonalenie odpowiedzi Kyle'a Burtona z ulepszonym formatowaniem wyjściowym:
źródło
Pozwala to uniknąć bałaganu bezpośrednio w passwd, pomija użytkowników, którzy nie mają wpisów cron, a dla tych, którzy je mają, wypisuje nazwę użytkownika oraz ich crontab.
Przeważnie upuszczam to tutaj, aby móc go później znaleźć na wypadek, gdyby kiedykolwiek musiałem go ponownie szukać.
źródło
/etc/passwd
. Powyższe rozwiązanie Matta jest bardziej odpowiednie dla tej konkretnej sytuacji, ale dobrze jest wiedzieć, że polecenie istnieje.Jeśli sprawdzasz klaster za pomocą NIS, jedynym sposobem sprawdzenia, czy użytkownik ma wpis crontab, jest odpowiedź Matta / var / spool / cron / tabs.
źródło
Aby uzyskać listę od użytkownika ROOT.
źródło
Ten skrypt działał dla mnie w CentOS, aby wyświetlić listę wszystkich cronów w środowisku:
źródło
cat /etc/passwd | sed 's/^\([^:]*\):.*$/echo "\ncrontab for \1:"; sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh
Podoba mi się powyższa prosta linijka:
Ale Solaris, który nie ma flagi -u i nie drukuje sprawdzanego użytkownika, możesz go zmodyfikować w następujący sposób:
Otrzymasz listę użytkowników bez błędów zgłaszanych przez crontab, gdy konto nie może używać crona itp. Pamiętaj, że w Solaris role mogą być również w / etc / passwd (patrz / etc / user_attr).
źródło
źródło
Poniżej usuwa komentarze, puste wiersze i błędy od użytkowników bez crontab. Pozostała Ci tylko jasna lista użytkowników i ich zadań.
Zwróć uwagę na użycie
sudo
w 2. linii. Jeśli jesteś już rootem, usuń to.Przykładowe dane wyjściowe:
Używam tego na Ubuntu (od 12 do 16) i Red Hat (od 5 do 7).
źródło
Zależy od twojej wersji crona. Używając Vixie cron na FreeBSD, mogę zrobić coś takiego:
jeśli chcę, aby bardziej ograniczać tabulację, mógłbym zrobić coś takiego:
Gdzie jest to dosłowna zakładka w części zamiennej sed.
Może być bardziej niezależny od systemu, aby przechodzić między użytkownikami
/etc/passwd
i robić tocrontab -l -u $user
dla każdego z nich.źródło
Dzięki za ten bardzo przydatny skrypt. Miałem kilka drobnych problemów z uruchomieniem go na starych systemach (Red Hat Enterprise 3, które inaczej obsługują egrep i tabulacje w łańcuchach), i innych systemach bez niczego w /etc/cron.d/ (skrypt zakończył się błędem). Oto łatka, aby działała w takich przypadkach:
Nie jestem pewien, czy zmiany w pierwszym egrep są dobrym pomysłem, ale cóż, ten skrypt został przetestowany na RHEL3,4,5 i Debian5 bez żadnego problemu. Mam nadzieję że to pomoże!
źródło
Opierając się na @Kyle
aby uniknąć komentarzy zwykle na górze / etc / passwd,
I na macosx
źródło
grep -v '^#
„polegać na magicznej liczbie11
?Myślę, że lepsza jedna linijka byłaby poniżej. Na przykład, jeśli masz użytkowników w NIS lub LDAP, nie byliby w / etc / passwd. To da ci crontabs każdego zalogowanego użytkownika.
źródło
możesz napisać dla wszystkich list użytkowników:
Możesz także przejść do
ten plik zawiera listę harmonogramów
źródło
Z przeprosinami i podziękowaniami dla yukondude.
Próbowałem podsumować ustawienia czasu dla łatwego czytania, chociaż nie jest to idealna praca i nie dotykam „każdego piątku” ani „tylko w poniedziałki”.
To jest wersja 10 - teraz:
Teraz w pełni publikuję skrypt.
https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107
źródło
Ponieważ chodzi o zapętlanie pliku (
/etc/passwd
) i wykonanie akcji, brakuje mi odpowiedniego podejścia do tego, jak mogę odczytać plik (strumień danych, zmienną) wiersz po wierszu (i / lub pole po polu) )? :Odczytuje
/etc/passwd
wiersz po wierszu za pomocą:
ogranicznika pola. Mówiącread -r user _
,$user
wstrzymujemy pierwsze pole i_
resztę (jest to tylko śmieciowa zmienna, aby zignorować pola).W ten sposób możemy wywołać
crontab -u
zmienną$user
, którą podajemy ze względów bezpieczeństwa (co jeśli zawiera spacje? Jest mało prawdopodobne w takim pliku, ale nigdy nie wiadomo).źródło
W systemie Solaris dla konkretnej znanej nazwy użytkownika:
Wszystkie pozostałe * Nix będą wymagały
-u
modyfikatora:Aby uzyskać wszystkie zadania użytkownika jednocześnie w systemie Solaris, podobnie jak inne posty powyżej:
źródło
Dla mnie spojrzenie na / var / spool / cron / crontabs jest najlepszym sposobem
źródło
Ten skrypt wysyła Crontab do pliku, a także wyświetla listę wszystkich użytkowników potwierdzających tych, którzy nie mają wpisu Crontab:
źródło