Bagaimana saya bisa menguji skrip cron baru?

14

Saya menjalankan beberapa distro Linux yang berbeda (Fedora 11, CentOS 5 dan SuSE 10.2) dan sering mengalami masalah di mana skrip baru yang ingin saya jalankan sebagai cron job berfungsi dengan baik ketika dipanggil langsung dari baris perintah, tetapi gagal ketika dipanggil dari cron karena sedikit variasi dalam PATH atau variabel lingkungan lain yang diperlukan.

Apakah ada cara saya dapat menguji menjalankan skrip individu seolah-olah sedang dijalankan dari cron, tanpa harus menjalankan seluruh crontab atau menggunakan run-parts untuk menjalankan seluruh direktori cron.daily / .hourly etc. etc.? Saya kira saya dapat mengedit sementara crontab saya untuk menjalankan skrip dalam beberapa menit berikutnya, tetapi saya lebih suka memiliki solusi yang lebih mandiri sehingga saya tidak mengambil risiko mengacaukan crontab.

gareth_bowles
sumber

Jawaban:

9

Dari pencarian google dipath in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Anda pada dasarnya ingin mengatur PATH dan kemudian tidak perlu khawatir tentang variasi. Selain itu, tes cepat adalah menjalankan skrip Anda melalui SSH di semua kotak Anda menggunakan variabel lingkungan yang sama.

Jeremy L
sumber
Terima kasih, saya tidak memutarbalikkan bahwa crontab sama seperti skrip di mana Anda dapat mendeklarasikan variabel lingkungan di dalam crontab.
gareth_bowles
7

Jika saya menjalankan pekerjaan cron yang dijadwalkan secara individual (baris terpisah di crontab) saya akan menjadwalkannya untuk setiap menit atau setiap menit saat saya mengujinya. Setelah diuji, saya akan mengedit baris crontab sehingga berjalan pada frekuensi yang saya inginkan.

Sebagai catatan tambahan, jika saya ingin menguji cron itu sendiri berfungsi dengan baik, dan mengirim hasilnya melalui email ke alamat yang benar (SANGAT penting) saya akan menambahkan baris berikut ke / etc / crontab saya:

 * * * * * root ls /doesnotexistfoobar

Berjalan setiap menit, dan mencoba melakukan lspada direktori yang tidak ada. Haruskah mengirim email pesan kegagalan setiap menit. Saya berkomentar ketika saya membuatnya berfungsi.

Kembali ke pertanyaan Anda: Anda mungkin tidak ingin memodifikasi pekerjaan cron yang ada agar sering dijalankan, baik karena ada kemungkinan lupa untuk mengubahnya kembali, dan karena menjalankan cron Anda. Cepat, cron.daily, atau cron. dapat memiliki efek samping, tergantung pada apa yang Anda miliki di sana. Untuk memastikan Anda menjalankan skrip di lingkungan yang sama dengan ketika dipanggil dari cron, saya sarankan untuk memodifikasi trik "ls" saya di atas:

Tambahkan baris ke crontab Anda untuk menjalankan skrip secara langsung:

 * * * * * root /etc/cron.hourly/customscript

Dengan begitu Anda dapat menjalankannya sesering yang Anda butuhkan untuk mengujinya.

Schof
sumber
Terima kasih - jika saya bisa memilih ini sebagai jawaban yang benar juga, saya akan!
gareth_bowles
0

Saya tidak tahu solusi yang lebih langsung, tetapi Anda dapat membuat pengguna (katakanlah, crontest) dengan privs untuk skrip Anda, dan gunakan crontab khusus pengguna untuk pengguna 'crontest' untuk menguji skrip dengan mengedit. agar skrip berjalan dalam beberapa menit berikutnya.

kingfish
sumber