Mengapa crontab tidak disimpan di direktori home user?

35

Saya ingin tahu: mengapa crontab disimpan di / var daripada di direktori home pengguna? Itu membuatnya sangat sulit untuk mengisolasi file-file ini untuk upgrade tetapi saya menduga bahwa ada alasan logis ...

Martin Eve
sumber

Jawaban:

41

Beberapa alasan yang dapat saya pikirkan:

  • Di lingkungan perusahaan, Anda dapat memiliki ribuan pengguna. Jika demikian, cron harus memindai melalui direktori setiap pengguna tunggal setiap menit untuk memeriksa file crontab (apakah sudah dibuat, dihapus, atau dimodifikasi).
    Dengan menyimpannya di satu lokasi, tidak perlu melakukan pemindaian intensif ini.
  • Direktori rumah mungkin tidak selalu tersedia. Jika direktori home adalah autofs mount, mereka mungkin tidak dipasang. Memiliki cron memeriksanya setiap menit akan menyebabkannya dipasang, dan mencegahnya tidak terpasang karena tidak aktif. Juga jika direktori home dienkripsi, dan didekripsi dengan kata sandi pengguna, cron tidak akan bisa masuk ke direktori home kecuali jika pengguna telah login dan mendekripsi / memasangnya.
  • Direktori rumah mungkin dibagikan di seluruh host. Jika direktori home adalah berbagi jaringan, direktori home yang sama akan muncul di beberapa host. Tetapi Anda mungkin tidak ingin cron job dijalankan pada setiap host, hanya satu saja.
Patrick
sumber
1
+1 Meskipun secara tradisional crontidak memindai ulang file-file itu setiap menit; itu dimuat sekali dan hanya membacanya kembali pada sinyal.
goldilocks
7
Tetapi Anda benar tentang poin # 3; menurut wikipedia crontab yang awalnya di $ HOME, sampai "[Bell lab devs] dimasukkan Unix di perintah ke cron, pindah crontab file-file dari direktori home pengguna (yang tidak host-spesifik) dan menjadi host-spesifik umum direktori spool ... "Pada saat itulah crontabperintah dibuat yang mungkin berhubungan dengan masalah reload.
goldilocks
2
@ Patrick Atau ketika sebuah program menggunakan utimessystem call, dengan jalur direktori spool sebagai argumennya, untuk mengatur waktu direktori, yang adalah apa yang dilakukan crontabperintah cron Vixie .
Mark Plotnick
2
Versi awal cron tentu tidak menerima perubahan pada file pengguna crontab kecuali jika diedit melalui crontab -e. Saya telah mengetahui hal ini di masa lalu di Solaris melihat halaman manual manpages.info/sunos/cron.1
2
Pada Solaris 10,, crontab -eyang merupakan setuid root, menulis pesan /etc/cron.d/FIFOsetelah pengguna mengedit crontab.
Mark Plotnick