У меня есть встроенное устройство 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