Di mana harus meletakkan cronjobs sistem?

11

Jika saya memerlukan cronjob yang berjalan pada level sistem (yaitu tidak spesifik untuk pengguna tertentu) bagaimana Anda menyarankan saya untuk membuatnya?

  1. berjalan crontab -esebagai root
  2. menambahkannya ke /etc/crontab
  3. membuat file yang mendefinisikan cronjob di /etc/cron.d/
  4. membuat file yang mendefinisikan cronjob /etc/cron.*ly/(tetapi hanya jika interval waktu seperti itu sesuai dengan kebutuhan saya)

Yang paling mengkhawatirkan saya adalah: solusi mana yang mungkin ditimpa oleh pembaruan sistem ?

Tambahan saya rasa jika pekerjaan itu lama saya harus meletakkannya di file skrip yang terpisah , misalnya di /root/bin/. Apa kamu setuju?

kebiruan
sumber
3
Anda harus menyatakan distribusi Unix atau Linux apa yang Anda gunakan.
jlliagre
Saya baru belajar sekarang :) Saya pikir itu adalah perilaku distro-independen ...
kebiruan

Jawaban:

13

Jangan gunakan crontab -e

Saya tidak akan memasukkannya crontab -esebagai root. Ini umumnya kurang jelas bagi admin lain dan cenderung hilang seiring waktu. Memasukkannya ke dalam /etc/crontabAnda dapat menentukan waktu yang Anda inginkan untuk menjalankannya dan Anda juga dapat menentukan pengguna yang berbeda.

Lokasi alternatif

Jika Anda tidak peduli menjalankan skrip sebagai pengguna yang berbeda, dan / atau Anda hanya ingin skrip dijalankan setiap minggu, setiap hari, dll. Maka beberapa distribusi menyediakan direktori tempat skrip dapat ditempatkan yang secara otomatis akan diproses pada waktu tertentu.

Misalnya di bawah distro berbasis Redhat:

$ ls -dl /etc/cron*
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.d
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.daily
-rw-------. 1 root root    0 Nov 23 07:42 /etc/cron.deny
drwxr-xr-x. 2 root root 4096 Nov 29 11:03 /etc/cron.hourly
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.monthly
-rw-r--r--. 1 root root  457 Sep 26  2011 /etc/crontab
drwxr-xr-x. 2 root root 4096 Sep 26  2011 /etc/cron.weekly

Saya akan sering kali menempatkan cron level sistem yang ingin saya jalankan pada waktu tertentu, /etc/cron.dbukan /etc/crontab, terutama jika skrip-skrip itu lebih rumit.

Saya lebih suka menggunakan direktori di bawah /etc/cron*karena mereka adalah tempat yang jauh lebih jelas yang akan dilihat oleh administrator sistem lain dan file-file di sini dapat dikelola melalui instalasi paket seperti rpmdan / atau apt.

Melindungi entri

Setiap direktori yang saya sebutkan ditujukan untuk meletakkan skrip yang tidak akan dihancurkan oleh manajer paket. Jika Anda khawatir tentang melindungi entri crontab, maka saya pasti tidak akan memasukkannya ke dalam /etc/crontabfile, dan sebaliknya meletakkannya sebagai skrip yang tepat di salah satu /etc/cron*direktori.

slm
sumber
1

Saya akan memilih # 4. Ini memungkinkan pengaturan sistem memilih kapan harus menjalankan pekerjaan, dan biasanya mereka melakukan pekerjaan dengan baik "berjalan saat tidak sibuk". Mengubah penjadwal cron sistem juga akan secara otomatis mempengaruhi waktu berjalan skrip.

Sisi buruknya adalah Anda tidak memiliki kendali langsung atas kapan dijalankan. Jika Anda membutuhkan lebih banyak kontrol langsung maka gunakan # 1.

1 kemungkinan besar akan ditimpa oleh pembaruan sistem. Padahal 3 dan 4 harusnya cukup aman. itu semua tergantung pada bagaimana Anda memperbarui. Distro Anda dapat memperbarui apa pun yang diinginkannya, tetapi hanya 2, yang biasanya beresiko ditimpa.

Akhirnya, saya akan meletakkan skrip di / usr / local / bin. Itu adalah tempat "normal" saya meletakkan hal-hal di seluruh sistem yang tidak dikelola oleh manajer paket distro. / root / bin juga dapat diterima jika hanya akan dijalankan oleh root. Namun ini semua kebanyakan rasanya.

kapas
sumber
0

Salah satu di atas akan berfungsi, dan tidak satu pun di atas harus ditimpa oleh pembaruan. Pilihan sebenarnya datang ke pendapat - tiga orang yang berbeda akan sering memiliki setidaknya dua atau tiga jawaban yang berbeda.

John
sumber