Apakah ada perintah atau skrip yang ada yang akan membiarkan saya melihat semua tugas cron terjadwal sistem * NIX sekaligus? Saya ingin memasukkan semua crontab pengguna, juga /etc/crontab
, dan apa pun yang ada di dalamnya/etc/cron.d
. Ini juga akan baik untuk melihat perintah tertentu dijalankan oleh run-parts
di /etc/crontab
.
Idealnya, saya ingin output dalam bentuk kolom yang bagus dan dipesan dengan cara yang bermakna.
Saya kemudian dapat menggabungkan daftar ini dari beberapa server untuk melihat "jadwal acara" secara keseluruhan.
Aku akan menulis skrip semacam itu sendiri, tetapi jika seseorang sudah pergi ke masalah ...
Jawaban:
Anda harus menjalankan ini sebagai root, tetapi:
akan mengulang setiap nama pengguna yang mencantumkan crontab mereka. Crontab dimiliki oleh masing-masing pengguna sehingga Anda tidak akan dapat melihat crontab pengguna lain tanpa menjadi mereka atau root.
Edit jika Anda ingin tahu milik pengguna crontab mana, gunakan
echo $user
sumber
for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
for user in $(getent passwd | awk -F : '{print $1}'); do echo $user; crontab -u $user -l; done
/etc/cron.hourly/
,/etc/cron.daily/
,/etc/cron.weekly/
,/etc/cron.monthly/
...?Saya akhirnya menulis skrip (saya mencoba untuk belajar sendiri poin-poin yang lebih baik dari bash scripting, jadi itu sebabnya Anda tidak melihat sesuatu seperti Perl di sini). Ini sebenarnya bukan urusan yang sederhana, tetapi melakukan sebagian besar dari apa yang saya butuhkan. Menggunakan saran Kyle untuk mencari crontab pengguna individu, tetapi juga berkaitan dengan
/etc/crontab
(termasuk script diluncurkan olehrun-parts
di/etc/cron.hourly
,/etc/cron.daily
, dll) dan pekerjaan di/etc/cron.d
direktori. Dibutuhkan semua itu dan menggabungkannya ke tampilan sesuatu seperti berikut:Perhatikan bahwa ini menunjukkan kepada pengguna, dan lebih banyak atau lebih sedikit mengurutkan berdasarkan jam dan menit sehingga saya dapat melihat jadwal harian.
Sejauh ini, saya sudah mengujinya di Ubuntu, Debian, dan Red Hat AS.
sumber
<' showcrons.sh: line 59:
dilakukan <<(cut --fields = 1 --delimiter =: / etc / passwd) '/etc/anacrontab
Di bawah Ubuntu atau debian, Anda dapat melihat crontab oleh
/var/spool/cron/crontabs/
dan kemudian file untuk setiap pengguna ada di sana. Itu hanya untuk crontab khusus pengguna saja.Untuk Redhat 6/7 dan Centos, crontab berada di bawah
/var/spool/cron/
.sumber
/etc/passwd
. IMO ini harus menjadi jawaban yang diterima, daripada semua solusi brute-force.Ini akan menampilkan semua entri crontab dari semua pengguna.
sumber
Tergantung pada versi linux Anda tetapi saya menggunakan:
sebagai root. Sangat sederhana dan sangat singkat.
Memberikan saya keluaran seperti:
sumber
tail -n +1 /var/spool/cron/*
untuk membuat daftar semua konten file.sudo sh -c 'tail -n +1 /var/spool/cron/*'
jika Anda tidak ingin menjadi root. OCD saya memaksa saya untuk menyelidiki mengapa saya tidak bisa menjalankan perintah ini seperti yang tertulis. Itu karena pengguna biasa tidak memiliki akses ke / var / spool / cron dir, dan glob ditafsirkan sebagai karakter bintang literal, yang jelas tidak ada.cd /var/spool/cron/cron/ && grep . *
juga akan mencetak nama pengguna yang sesuai di depan setiap pekerjaan cronPenyempurnaan kecil jawaban Kyle Burton dengan pemformatan output yang ditingkatkan:
sumber
Ini menghindari mengacaukan passwd secara langsung, melompati pengguna yang tidak memiliki entri cron dan bagi mereka yang memilikinya, ia mencetak nama pengguna serta crontab mereka.
Sebagian besar menjatuhkan ini di sini sehingga saya dapat menemukannya nanti kalau-kalau saya perlu mencarinya lagi.
sumber
/etc/passwd
. Solusi Matt di atas lebih tepat untuk situasi khusus ini, tetapi ada baiknya mengetahui bahwa perintah itu ada.Jika Anda memeriksa sebuah cluster menggunakan NIS, satu-satunya cara untuk melihat apakah pengguna memiliki entri crontab menurut jawaban Matt / var / spool / cron / tab.
sumber
Untuk mendapatkan daftar dari pengguna ROOT.
sumber
Skrip ini berfungsi untuk saya di CentOS untuk mendaftar semua crons di lingkungan:
sumber
cat /etc/passwd | sed 's/^\([^:]*\):.*$/echo "\ncrontab for \1:"; sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh
menghemat sedikit waktuSaya suka jawaban satu baris sederhana di atas:
Tetapi Solaris yang tidak memiliki flag -u dan tidak mencetak pengguna yang sedang diperiksa, Anda dapat memodifikasinya seperti ini:
Anda akan mendapatkan daftar pengguna tanpa kesalahan yang dilemparkan oleh crontab ketika akun tidak diizinkan untuk menggunakan cron dll. Perlu diketahui bahwa di Solaris, peran bisa juga di / etc / passwd (lihat / etc / user_attr).
sumber
sumber
Berikut menghapus komentar, baris kosong, dan kesalahan dari pengguna tanpa crontab. Yang tersisa hanyalah daftar pengguna dan pekerjaan mereka yang jelas.
Perhatikan penggunaan
sudo
di baris ke-2. Jika Anda sudah root, hapus itu.Contoh output:
Saya menggunakan ini di Ubuntu (12 melalui 16) dan Red Hat (5 melalui 7).
sumber
Tergantung pada versi cron Anda. Dengan menggunakan Vixie cron di FreeBSD, saya dapat melakukan sesuatu seperti ini:
jika saya ingin lebih banyak tab dibatasi, saya mungkin melakukan sesuatu seperti ini:
Di mana itu adalah tab literal di bagian pengganti sed.
Ini mungkin lebih sistem independen untuk loop melalui pengguna
/etc/passwd
dan lakukancrontab -l -u $user
untuk masing-masing.sumber
Terima kasih untuk skrip yang sangat berguna ini. Saya memiliki beberapa masalah kecil yang menjalankannya pada sistem lama (Red Hat Enterprise 3, yang menangani egrep dan tab dalam string secara berbeda), dan sistem lain tanpa apa pun di /etc/cron.d/ (skrip kemudian diakhiri dengan kesalahan). Jadi di sini ada tambalan untuk membuatnya berfungsi dalam kasus seperti ini:
Saya tidak begitu yakin perubahan pada egrep pertama adalah ide yang bagus, tetapi yah, skrip ini telah diuji pada RHEL3,4,5 dan Debian5 tanpa masalah. Semoga ini membantu!
sumber
Membangun di atas @Kyle
untuk menghindari komentar yang biasanya ada di bagian atas / etc / passwd,
Dan di macosx
sumber
grep -v '^#
bukannya mengandalkan angka ajaib11
?Saya pikir liner yang lebih baik akan di bawah. Sebagai contoh jika Anda memiliki pengguna di NIS atau LDAP mereka tidak akan berada di / etc / passwd. Ini akan memberi Anda crontab dari setiap pengguna yang telah masuk.
sumber
Anda dapat menulis untuk semua daftar pengguna:
Anda juga bisa pergi ke
file ini akan mencantumkan jadwal
sumber
Dengan permintaan maaf dan terima kasih kepada yukondude.
Saya sudah mencoba untuk meringkas pengaturan waktu untuk membaca mudah, meskipun itu bukan pekerjaan yang sempurna, dan saya tidak menyentuh 'setiap hari Jumat' atau 'hanya pada hari Senin'.
Ini adalah versi 10 - sekarang:
Saya sekarang menerbitkan skrip secara lengkap di sini.
https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107
sumber
Karena ini adalah masalah pengulangan melalui file (
/etc/passwd
) dan melakukan tindakan, saya kehilangan pendekatan yang tepat pada Bagaimana saya bisa membaca file (aliran data, variabel) baris demi baris (dan / atau bidang demi bidang )? :Ini membaca
/etc/passwd
baris demi baris menggunakan:
sebagai pembatas bidang. Dengan mengatakanread -r user _
, kita$user
menahan bidang pertama dan_
sisanya (itu hanya variabel sampah untuk mengabaikan bidang).Dengan cara ini, kita kemudian dapat memanggil
crontab -u
menggunakan variabel$user
, yang kami kutip untuk keselamatan (bagaimana jika itu berisi spasi? Tidak mungkin dalam file tersebut, tetapi Anda tidak pernah tahu).sumber
Di Solaris, untuk nama pengguna tertentu yang dikenal:
Semua yang lain * Nix perlu
-u
pengubah:Untuk mendapatkan semua pekerjaan pengguna sekaligus di Solaris, seperti pos lainnya di atas:
sumber
Bagi saya melihat / var / spool / cron / crontab adalah cara terbaik
sumber
Skrip ini menampilkan Crontab ke file dan juga mencantumkan semua pengguna yang mengonfirmasi mereka yang tidak memiliki entri crontab:
sumber