Jawaban:
Periksa apakah program yang Anda jalankan dengan cron memiliki file log sendiri. Jika jika mereka tidak menuliskan output mereka ke output standar, Anda dapat mengarahkan ini ke file atau mengirimkannya kepada Anda. Di dalam crontab, pengalihan shell standar berfungsi.
Misalnya untuk mengarahkan output kesalahan some_job.sh
ke some_job.err
dan membuang output standar (yaitu mengirimnya ke /dev/null
) tambahkan pengalihan berikut ke crontab Anda
33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err
atau mengirimkannya kepada Anda sebagai gantinya (jika mail
tersedia)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org
/dev/null
?
some_job.sh
stdout ke /dev/null
dan hanya setelah stderr ke stdout (yang sekarang tidak mengandung apa-apa lagi). Dengan begitu hanya stderrnya yang berakhir di stdout dan diteruskan ke mail
.
Kebanyakan daemon cron pada platform tempat saya bekerja secara otomatis mengirim email tentang stdout / stderr pekerjaan cron pengguna ke pengguna yang crontab asalnya berasal. Saya lupa apa yang terjadi pada sistem (pekerjaan cron non-pengguna-spesifik dari / etc / crontab). Masalahnya adalah orang tidak selalu membuat daemon mailer (yaitu, Mail Transfer Agent (MTA) seperti sendmail, qmail, atau postfix) pada sebagian besar OS mirip Unix lagi. Jadi tugas cron email keluaran hanya mati dalam folder email spool lokal suatu tempat jika mereka bahkan mendapatkan yang jauh. Jadi satu jawaban mungkin hanya menjalankan daemon mailer Anda, dan mungkin pastikan Anda memiliki file ~ / .forward untuk meneruskan email lokal Anda ke akun email "asli" Anda.
Jika Anda ingin pekerjaan Anda menulis ke file log tertentu, Anda dapat menggunakan redirection output standar seperti yang disarankan @honk, atau, seandainya pekerjaan cron Anda adalah skrip shell, Anda bisa meminta skrip panggilan logger (1) atau syslog (1) atau apa pun alat baris perintah lainnya yang disediakan OS Anda untuk mengirim pesan sewenang-wenang ke syslog. Kemudian Anda bisa menggunakan metode bawaan OS Anda untuk mengonfigurasi jenis pesan mana yang masuk, mungkin dengan mengedit /etc/syslog.conf.
Sebagian besar pekerjaan cron saya menggunakan skrip bash yang saya tulis khusus untuk tujuan dimulai oleh cron karena alasan tertentu. Pada itu, terutama ketika saya awalnya menulis dan men-debug mereka, saya suka menggunakan "set -vx" bash untuk membuat bentuk yang tidak dikembangkan dan diperluas dari setiap baris skrip shell ditulis ke stdout sebelum dieksekusi. Perhatikan bahwa skrip shell yang dimulai dari cron dianggap non-login, shell tidak interaktif, sehingga skrip startup shell standar Anda seperti .bashrc dan .profile tidak berjalan. Jika Anda menggunakan bash dan ingin bash untuk menjalankan skrip startup, Anda harus mendefinisikan variabel lingkungan "BASH_ENV = / path / ke / my / startup / script" di crontab Anda sebelum baris tempat Anda mendefinisikan pekerjaan.
mail
perintah untuk membaca pesan dari baris perintah. Atau lihat /var/spool/mail
. Tetapi jika Anda telah menginstal postfix atau mailer lain dari pada sendmail standar, diperlukan cara lain untuk membaca pesan.
mail -s "cron output" test@example.com
berfungsi dengan baik: /
less $MAIL
jika Anda ingin melihat output cron untuk pengguna saat ini atau less /var/spool/mail/root
jika Anda ingin melihat output cron untuk perintah yang berjalan sebagai root.
Cara paling sederhana adalah menangkap kesalahan cetak dan menyimpan kemudian dalam file. Saya memiliki cronjob yang memanggil baris perintah php, seperti ini:
1 0 * * * php /pathOfMyApp/index.php controllerName functionName> / pathOfMyApp / log / myErrorLog 2> & 1
Bagian sebelum '>' ini cronjob saya dan setelah '>' itu adalah menangkap dan menyimpan dalam file yang terletak di folder log di root proyek saya, tetapi bisa di tempat yang Anda inginkan. Waspada: setiap kali cronjob akan dipanggil, dia akan menimpa catatan terakhir. Anda dapat menggunakan '>>' untuk menulis di akhir file yang ada atau mencari perintah terminal 'cat'.
Jika crontab Anda menggunakan 'curl' atau 'wget' dan merujuk ke sebuah tautan, Anda dapat mencari di / var / log / httpd / appName untuk akses-log, jika cron kembali dengan 500 atau 400 pasti ada sesuatu yang salah.
Akhirnya, Anda juga dapat memeriksa / var / log / pesan.
Saya pikir pengalihan dalam file-cron mungkin bukan pilihan terbaik dalam kasus ini.
Seringkali Anda ingin log pendataan ditempatkan bersama dengan skrip pekerjaan cron. Dalam hal ini, saya sarankan yang berikut:
#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>
Ini menambahkan output dari pekerjaan cron ke file capture-log.txt.
Saya lebih suka mendapatkan laporan email tentang pekerjaan cron. Taruh saja
MAILTO=yourmail@domain.com
ke crontab dan Anda akan mendapatkan email. Tentu saja Anda harus mengonfigurasi e-mail untuk akun Anda.