Возникли проблемы с перенаправлением вывода приложения в файл журнала

Возникли проблемы с перенаправлением вывода приложения в файл журнала

У меня есть встроенное устройство ARM под управлением Linux, которое запускает приложение при загрузке. В этом приложении есть куча "printf(...)"операторов, которые мне нужно просмотреть. Обычный способ, которым я это делаю, — это убить работающее приложение через SSH (с хост-компьютера) на встроенном устройстве после его загрузки, а затем перезапустить его через терминал SSH, чтобы я мог видеть операторы печати в консоли на хост-компьютере. Проблема в том, что приложение ведет себя не очень хорошо после его убийства и повторного запуска.

Я попытался отредактировать сценарий запуска, чтобы говорить "(nohup ./myAppName 2>&1 | logger) &"и просматривать /var/log/syslogс помощью tail -f.. однако ничего не регистрируется.

Я проверил, что "(nohup echo "test123" 2>&1 | logger) &"это действительно правильно регистрируется в системном журнале.

Где что-то может пойти не так? Возможно ли, что приложение не печатает в stdout/stderr? Когда я перезапускаю приложение, оно правильно печатает в консоль, но, как я уже сказал, другие вещи, выходящие за рамки этого, ломаются, когда я это делаю.

решение1

Некоторые программы менее многословны, когда stdout не является tty. Вы можете эмулировать tty с помощью screen:

screen -L -d -m ./myAppName

который записывает вывод в что-то вроде ./screenlog.0. Вам необходимо разрешение на запись в текущем каталоге!

В противном случае также возможно, что программа просто тихо завершит работу только в вашей загрузочной среде.

Я бы отладил это, используя straceи избегая logger:

strace -f -o /tmp/myApp.strace nohup ./myAppName >/tmp/myApp.log 2>&1

Связанный контент