Gdzie jest przechowywany crontab użytkownika?

249

Od czasu aktualizacji crontab mojego użytkownika został usunięty. To nie pierwszy raz w tym roku i ból przywraca go za każdym razem.

Chciałbym móc wykonać kopię zapasową pliku crontab dla mojego użytkownika, ale w tym celu muszę wiedzieć, gdzie jest przechowywany.

Oli
źródło
4
byłoby miło, gdyby ktoś mógł podać również powód, dla którego został usunięty
Walter Tross
1
@WalterTross Tak, to dość denerwujące. Sądzę, że to efekt uboczny aktualizacji cronpakietu, ale zgadzam się - nie jest to coś, co powinno się zdarzyć.
Oli
Uh, nie sądzę, że użytkownik tego crona zostanie wyczyszczony za aktualizację pakietu crona!
pl1nk
@ pl1nk Nie mam pojęcia, co to wymazuje, ale tak się dzieje. Widocznie duch w maszynie.
Oli
Tabele użytkowników są przechowywane w obszarze tymczasowym / var / spool / cron / crontabs / $ USER, dlatego mogą zostać usunięte przy następnym uruchomieniu lub aktualizacji.
fcm,

Odpowiedzi:

325

W rzeczywistości nie zaleca się ręcznego obsługiwania tych plików. Na crontabstronę podręcznika :

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.

Pliki poniżej /var/spoolsą uważane za tymczasowe / działające, dlatego prawdopodobnie zostaną usunięte podczas aktualizacji, chociaż bliższe spojrzenie na cronskrypty aktualizacji pakietu może rzucić nieco światła na ten temat.

W każdym razie dobrą praktyką jest tworzenie kopii zapasowych wpisów cron lub przechowywanie ich w pliku w katalogu domowym.

Zakładam, że używasz crontab -edo tworzenia plików crontab w locie. Jeśli tak, możesz uzyskać „kopię” pliku crontab crontab -l. Prześlij go do pliku, aby uzyskać „kopię zapasową”:

crontab -l > my-crontab

Następnie możesz edytować ten plik my-crontab, aby dodać lub zmodyfikować wpisy, a następnie „zainstalować”, podając go plikowi crontab:

crontab my-crontab

Robi to samo sprawdzanie składni jak crontab -e.

roadmr
źródło
7
crontab -ljest łatwiejsze niż przejście, /var/spool/cron/crontabs/$USERgłównie ze względu na dziwne uprawnienia do tego pliku.
Oli
1
The iptables-saveof cron. Fajnie ...
Parthian Shot
4
Może powinniśmy umieścić crontab, aby automatycznie wykonać kopię zapasową> :)?
PascalVKooten
4
Przebieranie się /var/spool/cron/crontabsjest przydatne, gdy chcesz wyleczyć lub sprawdzić crontabs od wielu użytkowników.
dhasenan
1
Badając tajemnice na serwerze nie są znane, to jest wspólne sudo grep -rHin "$string" /etc/cron*(gdzie ciąg może być komenda jak docker, lftp, iptablesitp Jest to dobry pomysł, aby sprawdzić crontaby użytkowników również, że to, co prowadzi mnie do tego Q & A..sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
Bruno Bronosky
50

Jest przechowywany w /var/spool/cron/crontabsfolderze pod nazwą użytkownika.

Manula Waidyanatha
źródło
30

W końcu dowiedziałem się, dlaczego moje crontabs i instalacja Postfix ciągle się psują po starcie. To naprawdę głupi powód, ale ...

Ja /var/spoolzamontowany jako tmpfsRAM dysku.

Brzmi głupio i jest, ale poszedłem za jednym ze starych ulepszeń SSD, aby wydłużyć życie mojego SSD. Czyniąc tak, ja ślepo zamontowane /tmp, /var/tmpa /var/spooljak tmpfsnie myśląc o skutkach. Myślałem, że /var/spoolbyło jak /proc/albo /run/i że był przydatny tylko na czas trwania sesji. Najwyraźniej się myliłem.

Oli
źródło
8
Montaż powinien być bezpieczny /tmpjako tmpfs, ale nie /var/tmplub /var/spool. /tmpsłuży do tymczasowego przechowywania, które może zostać utracone po ponownym uruchomieniu. /var/tmpsłuży do tymczasowego przechowywania, które pozostanie po ponownym uruchomieniu. Jak już odkryłeś, /var/spooldane mają być przetwarzane, które pozostaną również po ponownym uruchomieniu.
thomasrutter
2
Zobacz pathname.com/fhs/2.2/fhs-5.15.html
thomasrutter
2
Należy również pamiętać, że liczba zapisów nie jest już problemem w przypadku nowoczesnych dysków SSD.
thomasrutter
17

Aby wyświetlić listę wszystkich zadań cron od wszystkich użytkowników w systemie:

for user in $(cut -f1 -d: /etc/passwd)
do
  echo $user
  crontab -u $user -l
done

Alternatywą dla twojego problemu byłoby umieszczenie ich w folderze cron.d i określenie odpowiedniego użytkownika na crona, jak na przykład:

00 01 * * * user /home/user/user-script.sh
pl1nk
źródło
jeśli odzyskujesz plik crontab z innego dysku, to nie zadziała, ponieważ crontab -udziała z twojego obecnego systemu.
JVE999
Chociaż przypuszczam, że jest to jednowierszowy, ponieważ mieści mniej niż 80 znaków i jest w pewnym stopniu czytelny, ogólnie lubię umieszczać kod w takim formacie, aby osoba mogła go skopiować lub wkleić lub umieścić w skrypcie (i, w skrypcie nie byłby to jeden wiersz kodu). Sugerowanie edycji ...
Parthian Shot
Ponadto miałem zamiar przekształcić go w while read userpętlę, aby obsłużyć przypadek, w którym nazwa użytkownika zawiera spacje, ale najwyraźniej nie jest to problem. Bardzo ograniczony zestaw znaków nazwy użytkownika.
Parthian Shot