Di mana crontab pengguna disimpan?

249

Sejak memutakhirkan crontab pengguna saya telah dihapus. Ini bukan pertama kalinya ini terjadi tahun ini dan itu adalah rasa sakit mengembalikannya setiap kali.

Saya ingin dapat membuat cadangan crontab untuk pengguna saya tetapi untuk itu saya perlu tahu di mana itu disimpan.

Oli
sumber
4
alangkah baiknya jika seseorang juga bisa memberikan alasan MENGAPA itu musnah
Walter Tross
1
@WalterTross Ya itu cukup menjengkelkan. Saya kira itu adalah efek samping dari memperbarui cronpaket tetapi saya setuju - itu bukan sesuatu yang harus terjadi.
Oli
Eh, saya tidak tahu bahwa cron pengguna bisa dihapus per peningkatan paket cron!
pl1nk
@ pl1nk Saya tidak tahu apa yang memusnahkannya tetapi itu tetap terjadi. Hantu di dalam mesin, kurasa.
Oli
Tabel pengguna disimpan pada area sementara / var / spool / cron / crontab / $ USER, karena itu dapat dihapus pada boot berikutnya atau peningkatan.
fcm

Jawaban:

325

Sebenarnya, tidak disarankan untuk menangani file-file itu dengan tangan. Per crontabhalaman manual:

Setiap pengguna dapat memiliki crontab mereka sendiri, dan meskipun
ini adalah file /var/spool/cron/crontabs, mereka tidak
dimaksudkan untuk diedit secara langsung.

File-file di bawah /var/spooldianggap sementara / berfungsi, itu sebabnya mereka mungkin dihapus selama upgrade, meskipun melihat lebih dekat pada cronskrip upgrade paket dapat menjelaskan hal ini.

Bagaimanapun, selalu merupakan praktik yang baik untuk membuat cadangan entri cron Anda atau menyimpannya dalam file di direktori home Anda.

Saya berasumsi Anda menggunakan crontab -euntuk membuat file crontab dengan cepat. Jika demikian, Anda bisa mendapatkan "salinan" file crontab Anda dengan melakukan crontab -l. Pipa itu ke file untuk mendapatkan "cadangan":

crontab -l > my-crontab

Kemudian Anda dapat mengedit file my-crontab untuk menambah atau mengubah entri, dan kemudian "instal" dengan memberikannya ke crontab:

crontab my-crontab

Ini melakukan sintaks yang sama dengan memeriksa crontab -e.

roadmr
sumber
7
crontab -llebih mudah daripada melalui /var/spool/cron/crontabs/$USERsebagian besar karena izin aneh pada file itu.
Oli
1
The iptables-savecron. Nice ...
Parthian Shot
4
Mungkin kita harus meletakkan crontab untuk secara otomatis mencadangkan> :)?
PascalVKooten
4
Menyodok /var/spool/cron/crontabsberguna ketika Anda ingin membuat atau memeriksa crontab dari banyak pengguna.
dhasenan
1
Ketika menyelidiki misteri pada server Anda tidak akrab dengan, itu adalah umum untuk sudo grep -rHin "$string" /etc/cron*(mana string mungkin perintah seperti docker, lftp, iptables, dll Ini adalah ide yang baik untuk memeriksa crontab pengguna juga Itulah yang menyebabkan saya untuk Q ini & A..sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
Bruno Bronosky
50

Ini disimpan di dalam /var/spool/cron/crontabsfolder di bawah nama pengguna.

Manula Waidyanatha
sumber
30

Saya akhirnya menemukan mengapa instalasi crontab dan Postfix saya terus rusak setelah boot. Itu alasan yang sangat bodoh tapi ...

Saya telah /var/spoolterpasang sebagai tmpfsRAM-drive.

Kedengarannya konyol dan aneh, tapi saya telah mengikuti salah satu SSD-tweak lama untuk memperpanjang umur SSD saya. Dalam melakukannya, saya membabi buta mount /tmp, /var/tmpdan /var/spoolsebagai tmpfstanpa memikirkan akibatnya. Saya pikir /var/spoolsuka /proc/atau /run/dan itu hanya berguna selama sesi berlangsung. Jelas saya salah.

Oli
sumber
8
Seharusnya aman untuk me /tmp- mount sebagai tmpfs, tetapi tidak /var/tmpatau /var/spool. /tmpdigunakan untuk penyimpanan sementara yang mungkin hilang saat reboot. /var/tmpdigunakan untuk penyimpanan sementara yang akan tetap setelah reboot. Dan seperti yang Anda temukan, /var/spooladalah untuk data yang akan diproses, yang juga akan tetap setelah reboot.
thomasrutter
2
Lihat pathname.com/fhs/2.2/fhs-5.15.html
thomasrutter
2
Perhatikan juga bahwa jumlah penulisan tidak lagi menjadi masalah dengan SSD modern.
thomasrutter
17

Untuk membuat daftar semua pekerjaan cron dari semua pengguna di sistem Anda:

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

Alternatif untuk masalah Anda adalah dengan meletakkannya di folder cron.d dan tentukan pengguna yang sesuai per cron seperti dalam contoh:

00 01 * * * user /home/user/user-script.sh
pl1nk
sumber
jika Anda memulihkan crontab dari drive lain, ini tidak akan berfungsi karena crontab -uberjalan dari sistem Anda saat ini.
JVE999
Sementara saya kira itu adalah satu-liner yang cocok dalam kurang dari 80 karakter dan agak mudah dibaca, saya biasanya suka meletakkan kode dalam format sehingga seseorang dapat menyalin atau menempelkannya ke dalam skrip (dan, dalam skrip, ini bukan satu baris kode). Menyarankan edit ...
Parthian Shot
Juga, saya akan mengubahnya menjadi while read userloop, untuk menangani kasus di mana nama pengguna berisi spasi, tapi ternyata itu bukan masalah. Kumpulan karakter nama pengguna yang sangat terbatas.
Parthian Shot