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?


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)


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



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.


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.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.