Nonaktifkan skrip cron. {Jam, harian, mingguan} khusus

25

Pada berbagai sistem yang saya kelola, ada skrip cron yang dijalankan melalui /etc/cron.{hourly,daily,weekly}tata letak yang umum digunakan . Yang ingin saya ketahui adalah apakah ada fungsionalitas umum 'nonaktifkan skrip ini'.

Jelas, hanya menghapus sesuatu dari direktori yang diberikan akan menonaktifkannya, tapi saya sedang mencari solusi yang lebih permanen. Menghapus /etc/cron.daily/slocateakan berfungsi untuk menonaktifkan nightly updatedbpada mesin rumah saya (di mana saya tidak pernah menggunakan slocate), tetapi lain kali saya memutakhirkan paket slocate, saya cukup yakin itu akan muncul kembali.

Dua distribusi yang paling menarik bagi saya adalah Gentoo dan OpenSUSE, tetapi saya berharap ada mekanisme yang diterapkan secara luas. Kedua distro karena saya minta mereka menggunakan vixie-cron (tidak yakin itu penting).

benizi
sumber

Jawaban:

45

Anda harus dapat chmod -x scriptnamemenonaktifkan skrip tetapi membiarkan file tetap di tempatnya.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
5
Itu mungkin atau mungkin tidak dibatalkan oleh sistem manajemen paket. Anda bisa menjadikan ini lebih kuat dengan melakukan chattr +i scriptnamesetelah chmod.
mc0e
@ mc0e terima kasih telah mengajari saya tentang file yang tidak dapat diubah, tetapi seperti yang pernah dikatakan seseorang , itu menakutkan . Jika saya pernah lupa apa yang saya lakukan, itu dapat menyebabkan masalah yang sangat membuat frustrasi.
Jonathan Y.
2
@ JonathanY .: Itulah gunanya lsattr- untuk menghapus menakutkan (itu daftar atteibutes file).
Dijeda sampai pemberitahuan lebih lanjut.
1
DW yakin, tetapi mengetahui untuk melihat atribut file ketika ada sesuatu yang tidak bisa dijelaskan (seperti di utas yang saya tautkan) adalah tendangan sesungguhnya di sini.
Jonathan Y.
@ JonathanY. Jadi sekarang kamu tahu. :-) Bagaimanapun, saya pikir bit 'menakutkan' di utas terkait tersebut merujuk pada bug pacman, bukan chattr itu sendiri
mc0e
9

run-parts tidak menjalankan pekerjaan yang memiliki titik pada namanya, jadi

mv /etc/cron.d/job /etc/cron.d/job.disabled

akan melakukan trik.

chrisv
sumber
1
Sayangnya itu akan memiliki masalah yang sama ketika memutakhirkan program - itu akan memeriksa untuk melihat apakah pekerjaan cron ada, dan karena tidak ada dengan nama aslinya, itu akan dibuat kembali.
Jenny D mengatakan Reinstate Monica
2
Kembali ketika memutakhirkan program adalah efek samping dari alat paket yang digunakan, tidak dapat diperbaiki melalui cara sederhana, dan bukan kesalahan Cron. Beberapa sistem paket nuke dan membuka file sebelumnya, yang lain berbeda dengan yang baru dan lama, dan meminta Anda jika ada perubahan untuk ditinjau. Apapun, pembaruan yang menghasilkan perilaku yang tidak diinginkan harus menjadi frustasi, tetapi merupakan bagian rutin dari administrasi sistem unix pada saat ini. Ada terlalu banyak paket yang bergerak terlalu cepat untuk secara teratur meninjau semua perubahan untuk dampaknya di setiap lingkungan individu.
peelman
Di Debian, ada gagasan tentang pengalihan file - yaitu Anda dapat mengubah nama file secara efektif saat masih dikelola oleh manajer paket. Mungkin mekanisme serupa ada di Gentoo dan / atau SUSE?
Bass
9

Biasanya cron.dailydipanggil melalui /etc/crontabgaris seperti misalnya

run-parts --report /etc/cron.daily

man run-parts memberi Anda pilihan.

run-parts --test /etc/cron.daily menunjukkan pekerjaan yang dieksekusi tanpa menjalankannya.

Saya lebih suka membuat subdir 'Dinonaktifkan' dan memindahkan pekerjaan saya di sana.

Dalam kasus apa pun jika Anda memperbarui suatu paket, kemungkinan besar pekerjaan tersebut akan diberlakukan kembali atau bit 'x' yang dihapus dipulihkan

Peter
sumber
1

Anda dapat menghapus paket slocate jika Anda tidak pernah menggunakannya.

Maxfer
sumber
Itu hanya contoh, tapi saran yang bagus, terima kasih. (Saya pikir sesuatu mungkin bergantung pada slocate, tetapi tampaknya tidak ada.)
benizi
Hapus slocate, dan instal mlocate sebagai gantinya. Jauh lebih baik.
mc0e
1

Jika Anda menggunakan cfengine ( https://cfengine.com/ ) Anda bisa melakukan ini dengan menonaktifkan. Anda hanya menulis file janji untuk sekelompok host dan itu akan berlaku sendiri dalam menjalankan cfagent berikutnya. Melakukan ini dengan boneka atau koki atau apa pun juga seharusnya cukup sederhana.

natxo asenjo
sumber
Menarik. Saya hanya menemukan alat manajemen konfigurasi sangat tangensial. Saya mencari solusi umum "Saya punya beberapa sistem seperti Unix yang sewenang-wenang".
benizi
1

The /etc/cron.daily et. Al. skrip dijalankan oleh skrip yang disebut run-parts. Naskah itu beragam. Misalnya saklar --test yang disebutkan di atas tidak ada di mesin yang saya gunakan saat ini.

Run-parts adalah skrip bash. Ini alat yang umumnya berguna untuk menjalankan semua skrip di direktori yang diberikan sebagai argumen. Biasanya ditemukan di / usr / bin / run-parts.

Ini memiliki kusut logika untuk memutuskan apa yang harus dijalankan. Kode itu menyimpan jawaban untuk pertanyaan Anda, tetapi juga bervariasi. Jadi, Anda perlu membaca kode untuk aman.

Dalam versi yang saya lihat itu memiliki logika bahwa, ketika bekerja pada direktori <foo>, memeriksa <foo> /jobs.deny. Jika ada, ia menolak untuk menjalankan skrip apa pun yang disebutkan dalam file itu pada satu baris, sendirian. Anggap Anda memiliki fungsi ini luar biasa karena akan tetap berfungsi ketika paket yang menginstal diinstal atau ditingkatkan.

Ben Hyde
sumber
0

Jika berurusan dengan RHEL dan turunannya (yang menyediakan crontabspaket), Anda dapat secara eksplisit menonaktifkan pekerjaan dengan memasukkan namanya ke dalam jobs.denyfile.

Dari halaman manual crontab / run-parts :

Eksekusi file dapat diizinkan atau ditolak dengan membuat file jobs.allow atau jobs.deny yang berfungsi sama seperti file allow / deny config lainnya. File harus dibuat di direktori yang ditentukan.

Contoh /etc/cron.daily/jobs.deny dapat berisi misalnya 0logwatch yang melarang eksekusi skrip ini.

shodanshok
sumber
-1

Jika Anda tidak menginginkan crontab pengguna juga, cukup nonaktifkan crond di daftar layanan Anda.

Dalam Debian dan versi berdasarkan Debian ini hanyalah masalah menghapus symlink dari /etc/rcX.d yang sesuai (untuk runlevel X).

Saya tidak tahu bagaimana Anda menangani layanan di SUSE atau Gentoo.

jishi
sumber
4
Itu hanya ide yang buruk. Menonaktifkan cron sama sekali akan menonaktifkan tugas perawatan yang bermanfaat seperti logrotate, updatedb, kemungkinan peningkatan tanpa pengawasan dan cadangan standar.
Tobu
Updatedb persis tugas yang saya coba nonaktifkan (memperbarui db untuk slocate). Meskipun demikian, ya, saran yang buruk secara umum.
benizi
Oh maaf. Saya salah membaca pertanyaan Anda dan berpikir bahwa Anda ingin menonaktifkan SEMUA cronjobs khusus sistem, bukan yang spesifik.
jishi