Apakah ada cara untuk memvalidasi format / etc / crontab?

35

Saya lebih suka menempel tugas terjadwal di / etc / crontab sehingga saya bisa melihat sekilas apa yang dijadwalkan untuk dijalankan, terlepas dari pengguna mana tugas itu dijalankan.

Satu-satunya Gotcha adalah bahwa format tidak divalidasi pada save, tidak seperti crontab -e - sehingga karakter yang tersesat dapat dengan diam-diam menghancurkan seluruh cron.

Apakah ada cara untuk memvalidasi format / etc / crontab sebelum / sesudah menyimpan?

Ben K.
sumber
4
Jika, seperti saya, Anda datang ke sini mencari cara sederhana (non-skrip) untuk memberi tahu Anda apakah entri cron Anda benar, Anda mungkin tertarik pada cronchecker.net - ini merupakan validator online untuk entri cron dengan manusia- hasil yang ramah.
Matt Gibson

Jawaban:

17

Satu-satunya cara yang dapat diandalkan yang saya temukan adalah untuk memeriksa log.

cronmemeriksa /etc/crontabsetiap menit, dan mencatat pesan yang menunjukkan bahwa ia memuatnya kembali, atau menemukan kesalahan.

Jadi setelah mengedit, jalankan ini:

sleep 60; grep crontab /var/log/syslog | tail

Atau, untuk tidak menunggu satu menit penuh, tetapi hanya sampai menit berikutnya + 5 detik:

sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail

Contoh output dengan kesalahan:

Jan  9 19:10:57 r530a cron[107258]: Error: bad minute; while reading /etc/crontab
Jan  9 19:10:57 r530a cron[107258]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

Output yang baik:

Jan  9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)

Itu di Debian 8. Pada sistem lain, cron mungkin masuk ke file yang berbeda.

(Saya pikir saya bisa menghindari berburu file log yang benar dengan menggunakan systemd journalctl -u cron, tapi itu tidak menunjukkan kepada saya entri log ini, dan sebenarnya tampaknya telah berhenti mencatat peristiwa cron 2 hari yang lalu karena beberapa alasan)

mivk
sumber
Diuji pada FreeBSD 10.3. Bekerja seperti pesona, ganti saja jalur log dengan / var / log / cron
Jette
14

Solusi lain yang lebih baru adalah skrip python chkcrontab

Dave Wongillies
sumber
Itu belum memeriksa cronjobs pengguna
userlond
11

Skrip shell keren yang jahat memiliki skrip shell yang memvalidasi file crontab.

Anda bisa mendapatkan arsip zip yang berisi skrip di sini

Skripnya disebut verifycron

Ludwig Weinzierl
sumber
1
Sumbernya ada di situs untuk buku itu juga: intuitif .
Tautan tidak berfungsi lagi pada 11 Januari 2017.
Epskampie
3

Saya menemukan solusi keren ini di sini: https://crontab.guru

Itu tidak hanya memvalidasi crontab, itu memberi tahu Anda secara eksplisit apa dan kapan crontab akan berjalan, dan menyoroti di mana kesalahan berada.

JDS
sumber
0

Di Ubuntu, sepertinya saya bisa menjalankan:

crontab path/to/crontab/file

CATATAN: ini memiliki efek samping memulai cronjob ini (terima kasih @NZD)

Jika file tidak valid, saya akan kesalahan, seperti:

"crontab":11: bad minute
errors in crontab file, can't install.
conradkdotcom
sumber
1
perintah ini memeriksa file crontab, tetapi pada saat yang sama menginstalnya (jika tidak mengandung kesalahan). Ini mungkin efek samping yang tidak diinginkan untuk OP.
NZD
Terima kasih @NZD, saya telah menambahkan ini ke balasan saya untuk memastikan OP mengetahui hal itu.
conradkdotcom
@conradk perintah tidak memulai cronjob, itu menimpa file crontab pengguna yang ada dengan file yang disediakan.
MadHatter mendukung Monica
Ini sebenarnya tidak bekerja untuk semua masalah yang mungkin terjadi pada crontab; itu akan menangkap beberapa masalah mencolok, tetapi tidak menangkap ini, misalnya: * 4/0 * * /bin/myscript.sh - 4/0tidak valid. tetapi tidak tertangkap dengan metode ini
JDS
@ JDS Bukankah ini nilai langkah? Apakah langkah nilai 0terlarang? unix.stackexchange.com/questions/32027/…
conradkdotcom