Lokalizacja pliku crontab

53

jak wielu (większość?), edytuję mój plik crontab, za pomocą crontab -ektórego zachowuję wszystkie rutynowe operacje, takie jak przyrostowe tworzenie kopii zapasowych, ntpdate, różne operacje rsync, a także raz w roku zmieniam temat Bożego Narodzenia na tło pulpitu. Z tego, co zrozumiałem, w przypadku nowej instalacji lub nowego użytkownika powoduje to również automatyczne utworzenie pliku, jeśli nie istnieje. Chcę jednak skopiować ten plik do innego użytkownika, więc gdzie jest aktualnie edytowany plik?

Jeśli różni się to między dystrybucjami, używam Centos5 i Mint 17

Jarmund
źródło
15
+1 za zrobienie raz w roku świątecznego tła pulpitu
Celada
5
@Celada To może nie być częste, ale jest to rutynowe zadanie.
Jarmund

Odpowiedzi:

54

Lokalizacja cronplików dla poszczególnych użytkowników to /var/spool/cron/crontabs/.
Od man crontab:

Każdy użytkownik może mieć własny plik crontab i chociaż są to pliki /var/spool/cron/crontabs, nie są przeznaczone do bezpośredniej edycji.

heemayl
źródło
7
Słowa kluczowe to „nie są przeznaczone do bezpośredniej edycji”, więc odpowiedź jest niepełna bez polecenia Celady poniżej, które zapewnia bezpieczniejszą odpowiedź na pytanie „skopiuj do innego użytkownika”. Jeśli ludzie przyzwyczają się do bezpośredniej edycji crontabs bez przesyłania ich za pomocą komendy crontab, rezygnują z wielu testów poprawności psychicznej, jakie zapewnia komenda.
Monty Harder
@MontyHarder Zgadzam się, że „nie są przeznaczone do bezpośredniej edycji”, ale co będzie, jeśli zajdzie taka potrzeba, tak jak trzeba wprowadzić wpis w crontab za pomocą skryptu bash. musisz użyć dokładnego pliku, nie sądzę, aby jakikolwiek interfejs zewnętrzny pomógł w takim przypadku, popraw mnie, jeśli się mylę.
Prabhat Kumar Singh
@PrabhatKumarSingh Nadal nie powinieneś bezpośrednio edytować pliku. Jeśli przeczytasz poniższe polecenie Celady, zobaczysz przykład, w jaki sposób skrypt może manipulować plikiem crontab bez bezpośredniej edycji. man crontabwyjaśnia, jak to działa.
Monty Harder
34

heemayl ma rację co do lokalizacji plików crontab w systemie Linux, ale może być inny w innych systemach operacyjnych, a „teoretycznie” może być również w innej lokalizacji w systemie Linux. Zasadniczo, gdy zapewniony jest specjalny interfejs dostępu do plików, należy go użyć. Zapewni to cronsprawdzenie plików przed ich zainstalowaniem, upewni się, że pliki mają uprawnienia, których potrzebuje, itp.

Dlatego powinieneś skopiować crontab od jednego użytkownika do drugiego za pomocą tego interfejsu, w ten sposób, a nie poprzez bezpośredni dostęp do plików.

crontab -u <user1> -l | crontab -u <user2>
Celada
źródło
3
Istnieje wiele dobrych powodów, dla których pliki crontab nie powinny być bezpośrednio przetwarzane przez nic innego niż sam system operacyjny. To zdecydowanie lepsze rozwiązanie. Naprawdę uważam, że należy to uwzględnić w oficjalnej odpowiedzi.
Monty Harder,
@MontyHarder Nie ma tak naprawdę „oficjalnej” odpowiedzi. Jest odpowiedź, którą osoba pytająca wybrała jako osobiście przydatną dla niej (ta ze znacznikiem wyboru) oraz odpowiedź, którą wybrała społeczność (z największą liczbą pozytywnych opinii). Krótko mówiąc, masz 15 powtórzeń, możesz zasugerować, że to poprawna odpowiedź, oceniając ją. Ponadto, jeśli chcesz zasugerować ulepszenia drugiej odpowiedzi, musisz skomentować tę odpowiedź - w przeciwnym razie jej autor nie zostanie powiadomiony o twoim komentarzu.
derobert
2
Następstwem tej odpowiedzi jest to, że należy przekierować wyjście crontab -ldo pliku, przenieść plik do innego systemu i przesłać go do niego crontab. A może nawet zrób to bezpośrednio ( crontab -l | ssh $remote_host crontab).
Blacklight Shining
6
„gdy zapewniony jest specjalny interfejs dostępu do plików, należy go użyć”. Wyobraź sobie, że każda aplikacja ma specjalny interfejs do edycji plików konfiguracyjnych zamiast po prostu ujawniać je za pomocą fs. Śledzenie tego byłoby dość irytujące.
Witiko
1
Jako pierwotny pytający myślę, że powinienem się nad tym zastanowić: zaakceptowana odpowiedź została wybrana na podstawie mojego pytania w dosłownym tego słowa znaczeniu; lokalizacja pliku. Moje zamiary dotyczące tego pliku są nieistotne. Nie sądzę, że edycja dodatkowych informacji zmienia odpowiedź, ale można ją uznać za zbyteczną.
Jarmund,