Idealnie nie chciałbym modyfikować powyższego pliku konfiguracyjnego.
Twardy! To jest właściwe.
Musisz zmienić swój exec
na script
i przestać uruchamiać ten program python w rozwidlonym podprocesie jako część potoku. Ta odpowiedź ServerFault wyjaśnia, jak to zrobić we wbudowanym skrypcie powłoki. Wprowadziłbym tylko jedną zmianę do podanego tam skryptu, w ostatnim wierszu:
exec python -u /opt/XYZ/my_prog.py 2>&1
W końcu nie ma naprawdę dobrego powodu, aby nie rejestrować standardowych błędów.
Coraz bardziej skomplikowane wahania, aby poradzić sobie z rozwidleniem, od expect daemon
przejścia do systemd
, pomijają punkt, w którym właściwym rozwiązaniem jest powstrzymanie demona przed rozwidleniem . Jeśli z obecnej kerfuffli jest jedna dobra rzecz, jest to ciągłe potwierdzenie, że to, co IBM napisał i zalecił w 1995 roku, było słuszne przez te wszystkie lata.
Przyzwyczaj się do idei demonów ładujących łańcuch . Istnieje wiele zestawów narzędzi, które upraszczają takie rzeczy. Przyzwyczaj się również do tego, aby nie używać skryptów powłoki. Istnieje wiele zestawów narzędzi zaprojektowanych specjalnie do tej pracy, które eliminują narzuty powłok ( co jest znanym dobrym pomysłem w świecie Ubuntu ).
Na przykład: polecenia powłoki w odpowiedzi ServerFault można zastąpić skryptem, który korzysta z execline
narzędzi Laurenta Bercota, które zostały zaprojektowane tak, aby móc to zrobić bez podpowłoki i niepowiązanych FIFO:
#!/command/execlineb -PW
pipeline -w {
logger -t my_prog.py
}
fdmove -c 2 1
python -u /opt/XYZ/my_prog.py
co byś wtedy po prostu
exec /foo/this_execlineb_script
Z moim nosh
zestawem narzędzi podobnie byłby skrypt zawierający:
#!/usr/local/bin/nosh
pipe
fdmove -c 2 1
python -u /opt/XYZ/my_prog.py | logger -t my_prog.py
Lub alternatywnie, można mieć tę zwrotkę bezpośrednio w definicji zadania Upstart (używając sztuczki, aby uniknąć metaznaków powłoki, aby Upstart nie spawnował powłoki):
exec /usr/local/bin/exec pipe --separator SPLIT fdmove -c 2 1 python -u /opt/XYZ/my_prog.py SPLIT logger -t my_prog.py
Dalsza lektura