bagaimana cara menonaktifkan sementara cronjobs pengguna?

14

Bagaimana cara saya menonaktifkan sementara satu atau lebih pekerjaan cron pengguna? Secara khusus, saya tidak ingin menunda hak cron pengguna - hanya tidak memecat pekerjaan mereka.

Saya menggunakan sistem SLES 11 SP2 dan SP3

Dinesh
sumber
Tidak bisakah Anda hanya menggunakan -u usersakelar crontabperintah dan meletakkan #karakter komentar di depan pekerjaan untuk menonaktifkan pengguna yang diberikan?
Janis
@Janis maka saya perlu melacak apa yang sudah dikomentari oleh pengguna, ditambah pengguna dapat melanjutkan dan menambahkan hal lain (saya tidak menambahkannya ke /etc/cron.deny). Terlalu banyak pekerjaan manual :(
Dinesh
Dinesh, saya (salah-) mengerti Anda ingin kontrol granular baik tentang apa yang Anda menonaktifkan.
Janis

Jawaban:

10

touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernameharus melakukan trik. Pulihkan dengan chmod 600dan touch(Anda perlu mengubah waktu file untuk membuat cron (berupaya) memuatnya kembali).

Pada setidaknya Debian dan mungkin dengan cron Vixie secara umum, chmod 400 /var/spool/cron/crontabs/$usernamejuga melakukan trik, karena implementasi itu menekankan pada izin yang tepat 600. Namun ini hanya berlangsung sampai pengguna menjalankan crontabperintah.

Jika Anda menginginkan cara yang kuat, saya rasa tidak ada yang lebih baik daripada memindahkan crontab sementara atau mengubah izin, dan menambahkannya untuk sementara /etc/cron.deny.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih. Pada sistem saya ini adalah / var / spool / cron / tabs / $ username. Tetapi masih dijalankan, bahkan setelah chmod.
Dinesh
Setelah mengubah perms file, saya juga perlu menghentikan / memulai ulang cron. Saya pikir itu mungkin karena cron mungkin memegang barang-barang itu di memori. Jadi saya menambahkan touch $usernamesetelah chmod. Tapi itu tidak membantu. (btw mengerti maksud Anda cron.deny)
Dinesh
@Dinesh Memang Anda perlu memperbarui mtime file atau cron berpikir itu tidak berubah dan menyimpan informasi yang di-cache. Saya perhatikan ini saat menguji kemarin tetapi lupa menyebutkannya dalam jawaban saya, maaf tentang itu.
Gilles 'SO- berhenti bersikap jahat'
Jika Anda ingin menonaktifkan untuk semua pengguna standar, cukup:chgrp root /var/spool/cron/crontabs
shrimpwagon
9

Bagaimana dengan hal seperti ini untuk menonaktifkan crontab pengguna:

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]

dan untuk mengaktifkan kembali:

crontab -u [username] /tmp/[username].cron.tmp

Ini memiliki keuntungan tambahan bahwa Anda dapat menjalankannya sebagai pengguna itu tanpa perlu root (cukup ambil parameter -u).

braindigitalis
sumber
0

Jika Anda menggunakan Debian, ini hanya berlaku untuk Debian AFAIK :

Anda dapat melakukannya dengan menambahkan titik pada nama cronjob.

Perilaku disebutkan pada dokumen resmi Debian:

https://www.debian.org/doc/debian-policy/#cron-job-file-names

Nama file tugas cron tidak boleh menyertakan periode atau karakter plus (. Atau +) karakter karena ini akan menyebabkan cron mengabaikan file. Garis bawah (_) harus digunakan sebagai ganti. dan + karakter.

Wadih M.
sumber
0

Jika Anda hanya ingin menghentikan semua cronpekerjaan untuk sementara waktu - misalnya, saat melakukan pemeliharaan sistem yang mereka mungkin berinteraksi dengan buruk - perintah biasanya

systemctl stop crond.service

dan, untuk melanjutkan

systemctl start crond.service

Saya kira Anda membutuhkan root atau otoritas roda untuk menjalankannya; jika perlu, jalankan melalui sudo atau (pilihan terakhir) login sebagai root.

Berlebihan untuk pertanyaan spesifik yang diajukan, tetapi memberikan "one-stop shopping" dan tidak perlu bermain dengan sistem file atau file sementara.

Felix Domestica
sumber
3
Karena ini menonaktifkan cron untuk semua pengguna, itu tidak benar-benar menjawab pertanyaan.
Scott
-1

Saya setuju, jalur via systemctl adalah yang harus diambil. Pada raspberry, perintah kaki akan menjadi

sudo systemctl stop cron.service
sudo systemctl start cron.service
Juergen
sumber
1
Ini akan menghentikan seluruh cronlayanan. OP ingin dapat memilih crontab pengguna mana yang akan dinonaktifkan.
roaima
1
Ini juga identik dengan jawaban lain.
roaima