karena cara hoster saya melakukan hal-hal yang saya harus menggunakan sistem untuk layanan.
Layanan ini memiliki file run yang dijalankan dan disalurkan ke file run kedua. Tapi saya menggunakan paket python (diberikan) yang log ke stderr bukannya stdout dan saya tidak bisa mendapatkannya untuk melakukan apa yang saya inginkan.
Jadi saya punya skrip run untuk layanan saya:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
yang disalurkan ke menjalankan sistem logging:
#!/bin/sh
exec multilog t ./main
Tetapi pipa tidak menghubungkan stderr (seperti yang diharapkan). Jadi setelah googling saya menambahkan pengalihan ke proses saya:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
Tapi ini tidak menyelesaikan masalah saya: Output saya sendiri (untuk stdout menggunakan cetak ular sanca) dicatat seperti yang diharapkan. Output stderr tidak dicatat.
Jika saya mengarahkan ulang naskah skrip yang saya modifikasi menjadi dua file, ini menunjukkan bahwa tidak ada pengalihan (stderr masih di stderr). Bagaimana saya harus mengubah pengalihan saya agar berfungsi?
sumber
exec ... 2>&1
memang bergabung dengan standard error menjadi standard out. Jadi ada sesuatu yang salah.dup2()
dalam kode. Tahu di mana output stderr adalah pergi? Pikiran lain: mungkin file run hoster Anda mengarahkan ulang stderr dengan cara ini sebelum memulai kode Anda.import sys; print("Hello, stderr", file=sys.stderr)
pasti.exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
dan lihat logfiles ini.Jawaban:
Silakan coba:
yaitu:
exec 2>&1
pada baris yang terpisah, memberitahu untuk mengarahkan stderr ke hal yang sama stdout akan (terminal Anda? Atau mail jika di crontab?), diikuti oleh cd & exec untuk mengganti proses yang ada dengan python3.2. Perhatikan bahwa saya beralih ke bash, bukan sh, untuk portabilitas yang lebih rendah tetapi biasanya keandalannya jauh lebih baik. Jika ini berhasil, bagus, jika tidak beberapa orang berpengetahuan lebih baik akan masuk. (Saya tidak punya waktu untuk melakukan penelitian sekarang ini)sumber