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