GNU/Linux >> Belajar Linux >  >> Linux

Keluaran Mail Cron Hanya Saat Git Melempar Kesalahan Nyata?

Ada repo Git yang ada di satu server, kami ingin menghasilkan output doxygen untuknya di server yang berbeda. Perintah berikut berfungsi untuk saya tetapi memiliki kelemahan mengirim email setiap kali repo diperbarui karena Git menggunakan stderr untuk pelaporan kemajuan (pencarian cepat melalui oracle yang maha kuasa menyarankan agar mereka menganggap perilaku ini sebagai fitur).

59 * * * * cd FQNameOfRepo; git pull 1>/dev/null; make doc-all 1>/dev/null; cp doc/latex/refman.pdf doc/html/

Sementara saya bisa grep melalui output stderr dari Git atau membandingkannya dengan string yang diketahui, ini tampaknya salah. Apakah saya menggunakan perintah Git yang salah? Bagaimana ini dilakukan dengan benar?

Untuk klarifikasi, saya masih ingin perintah ini mengirim email jika terjadi kesalahan nyata, jadi mengarahkan ulang stderr tidak akan membantu.

Jawaban yang Diterima:

Mengandalkan kemampuan surat crond terlalu banyak dapat menghasilkan berbagai masalah. Tergantung pada crond Anda, mereka mungkin tidak cukup fleksibel.

Misalnya, sering kali, seperti yang Anda jelaskan, seseorang tidak dapat mengonfigurasi bahwa hanya status keluar !=0 yang akan memicu pengiriman stdout/stderr. Masalah lainnya adalah, misalnya, crond Solaris memiliki batas ukuran (relatif) kecil pada output yang ditangkap/dikirim.

Jadi, untuk situasi seperti itu, saya sarankan menulis skrip pembantu kecil yang memanggil perintah dan mengarahkan output ke file log sementara. Ini dapat secara internal melacak status keluar dari semua program dan jika ada !=0 itu juga:

  • cat file log ke stdout
  • kirim melalui alat surat baris perintah
  • atau cukup keluarkan diagnostik singkat yang menyertakan lokasi file log

Sesuatu seperti:

$ cat helper.sh
set -u
set -e

# setup log-file $LOG
# ...

cd FQNameOfRepo
set +e

git pull 1>/dev/null 2>> $LOG
r1=$?
make doc-all 1>/dev/null 2>> $LOG
r2=$?
cp doc/latex/refman.pdf doc/html/ 2>> $LOG
r3=$?

set -e

if [ $r1 -ne 0 -o $r2 -ne 0 -o $r3 -ne 0 ]; then
    # do some stuff, print/mail $LOG or something like that, etc.
    # ...
    exit 23
fi

Linux
  1. Bagaimana cara memperbaiki kesalahan Kegagalan Otentikasi Cron di Linux?

  2. @reboot Crontab Hanya Berfungsi Untuk Root?

  3. Crontab Log:Cara Mencatat Keluaran Skrip Cron Saya

  1. Menggunakan pekerjaan CRON untuk mengunjungi url?

  2. Izin ditolak saat mengkloning repositori git

  3. kesalahan Masukan/Keluaran gcsfuse

  1. Kesalahan saat menggunakan pembantu kredensial Git dengan gnome-keyring sebagai Sudo

  2. Bagaimana cara melihat pekerjaan cron yang sedang berjalan?

  3. Lewati permintaan nama pengguna saat menggunakan git