Bagaimana saya bisa mendapatkan daftar semua pekerjaan cron terjadwal di komputer saya?

201

Sysadmin saya telah mengatur banyak pekerjaan cron di komputer saya. Saya ingin tahu persis apa yang dijadwalkan untuk jam berapa. Bagaimana saya bisa mendapatkan daftar itu?

jujur
sumber
3
Ini bukan jawaban untuk pertanyaan, tetapi hanya catatan tentang praktik terbaik. Seseorang dapat mengkonfigurasi ini sebagai pekerjaan cron per-pengguna untuk rootatau apacheatau apa pun, tetapi seseorang harus menggunakan /etc/crontabatau (lebih baik, di sebagian besar distro) /etc/cron.ddan /etc/cron.[timeframe].
mattdm
Saya telah memposting skrip yang mengotomatisasi ini ke tingkat yang berguna di: - stackoverflow.com/questions/134906/… Ini tidak sempurna tetapi mungkin mencakup 90% dari kebutuhan. Ini adalah contoh yang baik dari apa yang tidak boleh ditulis dalam bash.
david collier

Jawaban:

143

Bergantung pada bagaimana sistem linux Anda diatur, Anda dapat melihat:

  • /var/spool/cron/* (crontab pengguna)
  • /etc/crontab (crontab seluruh sistem)

juga, banyak distro memiliki:

  • /etc/cron.d/* Konfigurasi ini memiliki sintaks yang sama dengan /etc/crontab

  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly,/etc/cron.monthly

Ini hanyalah direktori yang berisi file executable yang dieksekusi setiap jam, harian, mingguan atau bulanan, sesuai dengan nama direktori mereka.

Selain itu, Anda dapat memiliki pekerjaan (periksa /var/spool/at/*), anacron ( /etc/anacrontabdan /var/spool/anacron/*) dan mungkin orang lain yang saya lupa.

jsbillings
sumber
4
Terima kasih, saya menemukannya /etc/cron.daily. Bagaimana cara dailyfile itu bekerja? Jam berapa pekerjaan harian akan berjalan? Di mesin saya, mereka tampaknya berjalan sekitar tengah hari, tetapi ingin memberitahu sysadmin saya bagaimana mengubahnya menjadi tengah malam sebagai gantinya.
Frank
5
cron.daily dipanggil dari /etc/crontab, misalnya pada sistem Ubuntu saya itu: 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )yang berarti 6:25 pagi.
Kowh
cron.daily dipanggil dari / etc / crontab pada sistem RHEL5 saya juga, jika Anda menginginkan lebih banyak titik data.
jsbillings
Pada Fedora yang lebih baru (dan mungkin RHEL6 - belum melihat), croniedaemon merawat mereka yang menggunakan konfigurasi /etc/anacrontab.
mattdm
Terkadang /var/cronjuga begitu.
CMCDragonkai
135

Dengan sebagian besar Crons (mis. Vixie-Cron - standar Debian / Ubuntu, standar Cronie - Fedora, Solaris Cron ...) Anda mendapatkan daftar pekerjaan cron terjadwal untuk pengguna saat ini melalui:

$ crontab -l

atau untuk pengguna lain via

# crontab -l -u juser

Untuk mendapatkan crontab untuk semua pengguna, Anda dapat memutar semua pengguna dan memanggil perintah ini.

Atau, Anda dapat mencari file spool. Biasanya, mereka disimpan di bawah /var/spool/cron, misalnya untuk direktori berikut vcron

/var/spool/cron/crontabs

berisi semua crontab yang dikonfigurasi dari semua pengguna - kecuali pengguna root yang juga dapat mengonfigurasi pekerjaan melalui crontab seluruh sistem, yang terletak di

/etc/crontab

Dengan cronie (default pada Fedora / CentOS), ada juga .ddirektori konfigurasi style untuk pekerjaan cron sistem, juga:

/etc/cron.d

(Seperti biasa, .ddirektori menyederhanakan mempertahankan entri konfigurasi yang merupakan bagian dari paket yang berbeda.)

Untuk kenyamanan, sebagian besar distribusi juga menyediakan direktori tempat skrip yang ditautkan / disimpan dijalankan secara berkala, misalnya:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

Eksekusi skrip yang tepat waktu biasanya dikelola melalui run-partsentri di sistem crontab atau melalui anacron .

Dengan Systemd (mis. Pada Fedora, CentOS 7, ...) eksekusi pekerjaan berkala juga dapat dikonfigurasi melalui unit pengatur waktu . Penghitung waktu sistem yang diaktifkan dapat ditampilkan melalui:

$ systemctl list-timers

Perhatikan bahwa pengguna di samping root mungkin memiliki instance sistem pengguna berjalan di mana timer dikonfigurasikan juga. Misalnya, pada Fedora, secara default, instance systemd pengguna dimulai untuk setiap pengguna yang saat ini masuk. Mereka dapat dikenali melalui:

$ ps aux | grep 'systemd[ ]--user'

Penghitung waktu pengguna tersebut dapat dicantumkan melalui:

$ systemctl --user list-timers

Alternatif untuk mengeluarkan list-timersperintah adalah mencari file unit timer (pola *.timer:) dan tautan simbolis ke mereka dalam sistem dan direktori konfigurasi sistem userd yang biasa:

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(Seperti halnya unit layanan normal, unit timer diaktifkan melalui pembuatan tautan simbolik di direktori config systemd kanan.)

Lihat juga:

maxschlepzig
sumber
Saya tidak downvote. Tapi saya hanya mencoba crontab -l -u root(karena cronjobs yang ingin saya ketahui tentang run under root), dan katanya saya tidak punya hak untuk menggunakannya -u.
Frank
3
Maka Anda harus menyebutnya dengan hak istimewa yang cukup - yaitu sebagai rootpengguna.
maxschlepzig
2
Masih belum selesai - beberapa versi cron menjalankan pekerjaan dari /etc/cron.d dan /etc/cron.{daily, setiap hari, setiap bulan, setiap minggu} tanpa program bantuan yang dipanggil dari / etc / crontab.
mattdm
2
@maxschlepzig - tetapi tidak selalu. Dan pertanyaannya adalah "bagaimana saya bisa mendapatkan daftar semua pekerjaan cron"; jawaban yang "baik, ini beberapa dari mereka" bukanlah jawabannya.
mattdm
1
@maxschlepzig - cronie, seperti yang dikirim dalam Fedora dan RHEL6, tidak merujuk pada yang ada di dalamnya /etc/crontab, tetapi gunakan /etc/anacrontab. Saya mungkin salah tentang implementasi sebenarnya yang tidak merujuk ini dalam file konfigurasi apa pun. (Tapi kalau begitu, aku juga tidak mengundurkan diri .... Aku hanya bilang.)
mattdm
5

Untuk membuat daftar semua crons untuk pengguna yang diberikan.

crontab -u username -l;

Untuk membuat daftar semua crons untuk semua pengguna

Jalankan sebagai pengguna super

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done
Arunachalam Manikandan
sumber
1
OP meminta daftar semua pekerjaan cron.
Drav Sloan
1
Untuk beberapa alasan yang tidak menampilkan /etc/cron.d/ pekerjaan.
jamshid
Ini tidak bekerja. "tidak ada crontab untuk www-data". tetapi nama pengguna www-data ada.
mishanon