benim evime işler yapma şekli nedeniyle hizmetler için bir sistem kullanmak zorundayım.
Bu hizmet, yürüttüğü ve ikinci bir çalışma dosyasına bağladığı bir çalışma dosyasına sahiptir. Ama stdout yerine stderr günlükleri (verilen) bir python paketi kullanın ve ben istediğimi yapmak için alamıyorum.
Yani benim hizmet için bir çalışma komut dosyası var:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
günlük sisteminin çalıştırılmasına bağlanan:
#!/bin/sh
exec multilog t ./main
Ancak boru stderr'ı bağlamaz (beklendiği gibi). Google'dan sonra koşuma bir yönlendirme ekledim:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
Ama bu benim sorunumu çözmez: Kendi çıkışlarım (piton baskı kullanarak stdout için) beklendiği gibi günlüğe kaydedilir. Stderr çıkışı günlüğe kaydedilmez.
Değiştirilmiş çalışma kodumu iki dosyaya yeniden yönlendirirsem, yeniden yönlendirme olmadığını gösterir (stderr hala stderr'dadır). Çalışmak için yeniden yönlendirmemde nasıl değişiklik yapmam gerekir?
dup2()
. Bir fikrin nerede Stderr çıkışı olan gidiş? Başka bir düşünce: belki de barındırıcınızın çalışma dosyası kodunuzu başlatmadan önce stderr'ı bu şekilde yönlendiriyor.
import sys; print("Hello, stderr", file=sys.stderr)
Emin olmak için komut dosyasını değiştirin .
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
ve bu günlük dosyalarına bir göz atın.
exec ... 2>&1
gerçekten standart çıkış standart çıkış katılmak. Yani başka bir şey ters.