из-за того, как мой хостер делает вещи, я должен использовать систему для услуг.
У этой службы есть файл запуска, который он выполняет и передает во второй файл запуска. Но я использую (данный) пакет python, который записывает в stderr вместо stdout, и я не могу заставить его делать то, что я хочу.
Итак, у меня есть скрипт запуска для моего сервиса:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
который передается в прогон системы логирования:
#!/bin/sh
exec multilog t ./main
Но труба не соединяет stderr (как и ожидалось). Поэтому после поиска в Google я добавил перенаправление к своему бегу:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
Но это не решает мою проблему: мои собственные выходные данные (для вывода с использованием pythons print) записываются как положено. Вывод stderr не зарегистрирован.
Если я перенаправляю мой измененный скрипт выполнения в два файла, это показывает, что перенаправление отсутствует (stderr все еще находится в stderr). Как мне изменить мое перенаправление для работы?
dup2()
в коде. Любая идея , где выход STDERR это происходит? Другая мысль: возможно, файл запуска вашего хостера перенаправляет stderr таким образом перед запуском вашего кода.
import sys; print("Hello, stderr", file=sys.stderr)
наверняка.
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
и посмотрите на эти файлы журнала.
exec ... 2>&1
действительно объединяет стандартную ошибку в стандартную. Так что еще что-то не так.