Jaki jest prawidłowy sposób edycji pliku crontab?

52

Próbuję zautomatyzować odświeżanie awstats na moim serwerze internetowym i rozumiem, że do skonfigurowania tego muszę użyć crona. Więc każdy użytkownik ma plik crontab?

Postępowałem zgodnie z instrukcjami tutaj społeczność / AWStats

I mówi, aby przejść do pliku na: /etc/crontab

Ten plik zawiera już pewne informacje. Czy to główny crontabplik czy coś takiego? Widziałem kilka instrukcji online, aby użyć wyskakującego pliku crontab -e.

Jakiego pliku należy użyć i jak najlepiej to zrobić?

Jeśli zaplanuję zadanie jako użytkownik inny niż root, czy będzie ono uruchamiane samo w określonym przedziale czasu, bez żadnych problemów?

Czy będę musiał ponownie uruchomić serwer po zapisaniu zadania cron w crontabpliku, zanim zacznie działać?

timbram
źródło

Odpowiedzi:

50

Jakiego pliku należy użyć i jak najlepiej to zrobić?

crontab -e to najlepszy sposób, aby to zrobić - pozwoli to na łatwą edycję crontabów dla poszczególnych użytkowników.

Jeśli zaplanuję zadanie jako użytkownik inny niż root, czy będzie ono uruchamiane samo w określonym przedziale czasu, bez żadnych problemów?

Tak, i będzie działać z uprawnieniami tego konta użytkownika.

Zasadniczo najlepiej jest uruchamiać zaplanowane zadania z najniższymi uprawnieniami, na jakie można sobie pozwolić, więc jeśli to, co robisz, nie będzie wymagało rootowania, nie używaj roota. Jeśli nawet nie trzeba mieć dostępu do Twojego pliki i foldery konta, możesz utworzyć nowego użytkownika i korzystania z konta użytkownika tylko dla tego zadania. Z drugiej strony, jeśli zadanie robi wymagają korzeń, crontab wykorzystaniu koniecznie roota ( su/ sudo suroot następnie użyć crontab -e).

Czy muszę ponownie uruchomić serwer po zapisaniu zadania cron w pliku crontab, zanim zacznie działać?

Nie, zacznie działać od razu (cóż, następny możliwy zaplanowany czas).

Dlaczego nie edytować pliku bezpośrednio? Gdzie to się znajduje?

Pliki crontab użytkownika znajdują się w /var/spool/cron/crontabs, ale ich uprawnienia są ustawione w taki sposób, że nie można przejść do nich bez zgody administratora (ale po otwarciu i procesie cron upuszcza uprawnienia, nadal może uzyskać dostęp do pliku).

System nie jest przeznaczony dla użytkowników końcowych do bezpośredniej edycji tych plików, a faktycznie u góry pliku znajduje się surowe DO NOT EDIT THIS FILEostrzeżenie u góry w tym celu. Plik jest natomiast przeznaczony do edycji, za pomocą crontab -ektórej konfiguruje tymczasowe dublowanie pliku /tmpdo edycji - bez surowego ostrzeżenia - po czym sprawdza i instaluje sam plik crontab. Można to wszystko zrobić bez zgody administratora.

Jeśli edytowałeś plik crontab bezpośrednio, nie wiem jaki byłby wynik. Możliwe, że po prostu nie zadziała do następnego uruchomienia, a wszelkie błędy mogą być trudne do debugowania.

thomasrutter
źródło
5
crontab -epozwala edytować crontab użytkownika bez sudo. Pliki crontab użytkownika znajdują się w /var/spool/cron/crontabskatalogu, do którego nie można uzyskać dostępu bez zgody administratora (ale w taki sposób, że gdy cron porzuci uprawnienia, nadal będzie mógł je odczytać). Nawet jeśli używasz sudo do bezpośredniej edycji pliku, u góry zobaczysz duże ostrzeżenie: „NIE EDYTUJ TEGO PLIKU” - plik jest przeznaczony do edycji za pomocą crontabpolecenia, które korzysta z tymczasowej kopii, /tmpa następnie instaluje to po zapisaniu.
thomasrutter
25

Każdy użytkownik ma swój własny crontab.

Aby to zobaczyć, po prostu wpisz

crontab -l

i tak, dobrze to widziałeś, kiedy chcesz dodać, crontabpo prostu zrób

crontab -e

po raz pierwszy zostaniesz zapytany o edytor do użycia crontab. Ponieważ jesteś początkującym, jak mówisz, polecam używać nano, jest to najprostszy edytor do użycia.

Sam crontab działa w ten sposób

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Na przykład, aby uruchamiać zadanie co 15 minut tylko w poniedziałek, robisz to w ten sposób

*/15 * * * mon /home/me/yourscript.sh

i TAK, bardzo ważne jest, aby umieścić swoją cronjob w tabeli cront użytkownika, który ma wystarczające prawa do jej wykonania.

Więc jeśli twoim skryptem musi być root lub specjalny użytkownik, upewnij się, że wykonałeś su dla tego użytkownika i tam dodajesz cronjob.

Również bardzo ważne!

cronjob jest głupi! Tak, powiedziałem to. Zawsze upewnij się, że wprowadzasz pełną ŚCIEŻKĘ dla application/command/scriptużywanego, ponieważ crontab nie będzie działać z .bashrcpodobnym. Zawsze musisz upewnić się, że poinformujesz crona, gdzie może znaleźć pliki i katalogi.

Aby odpowiedzieć na pozostałe pytania:

Oczywiście będzie działać samodzielnie, po to jest. Ale musisz sprawdzić, czy koleżeństwo naprawdę to robi, czy czegoś brakuje. Na przykład zaloguj się do pliku dziennika, aby zobaczyć, czy to naprawdę działa.

I NIE, restart nie jest potrzebny. Ponowne uruchomienie w systemie Linux jest zwykle potrzebne tylko po zainstalowaniu nowego jądra. Aby go użyć, musisz zrestartować komputer. Prawie wszystko inne można zrobić bez ponownego uruchamiania systemu Linux. Oczywiście są wyjątki, ale ogólnie to stwierdzenie jest poprawne.

s1mmel
źródło
sprawdź swój format czasu przejrzyj tę stronę crontab.guru
Astm