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?
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.
exec ... 2>&1
memang bergabung dengan standard error menjadi standard out. Jadi ada sesuatu yang salah.