Можно ли создать собственный поток?

Мое решение состояло в том, чтобы запустить xvfb в сценарии точки входа Docker:

Xvfb :0 -screen 0 1024x768x24 &

Вы можете поместить эту же строку в какой-нибудь сценарий запуска ОС (, например..bashrc)скрипт, если вы не используете Docker.

Затем в другом скрипте я экспортировал изображение и вызвал реальную функцию, которую хотел использовать

export DISPLAY=:0
firefox $1
1
14.04.2020, 21:13
1 ответ

Абсолютно нормальный способ просмотра логов — записать их в файл . Если вы хотите увидеть журналы, прочитайте файл. Чтобы отслеживать строки по мере их добавления к файлу, используйте команду, например tail -f, которая после достижения конца файла оставляет его открытым и отслеживает дополнительные строки, которые к нему добавляются. Опция -fпредназначена для «следования», а в меньше вы можете получить тот же эффект с помощью Fдля «следования»; в других программах это может быть известно как «хвост» файла, потому что tail— это классическая утилита, которая делает это. См. тег tailна этом сайте для получения дополнительной информации о хвостовых утилитах.

Если вы совершенно не хотите записывать журналы в файл, вы можете запустить приложение в screen или tmux . Для запуска /usr/bin/my_application --some-optionв фоновом режиме с экраном:

screen -S myapp -d -m /usr/bin/my_application --some-option

Для просмотра журналов:

screen -S myapp -d -r

Нажмите Ctrl + Ad для отсоединения, т.е. прекращения просмотра логов. Пока вы смотрите журналы,вы также можете отправить входные данные в приложение, что может быть нежелательно. Чтобы предоставить доступ только для чтения -, см. . Есть ли способ запустить «экран» в режиме только для чтения -?

С tmux для запуска приложения:

tmux new-session -s myapp -d /usr/bin/my_application --some-option

Для просмотра последних журналов:

tmux attach -r -t myapp

Нажмите Ctrl + Ad для отсоединения. Запустите tmux attachбез -r, чтобы иметь возможность взаимодействовать с приложением.


Именованный канал — это не то, что вам нужно. Я упомянул об этом просто потому, что на первый взгляд он выглядит уместно (и когда я пишу, он всплывает в комментариях ). Он будет делать то, что вы описываете:

mkfifo foo
while :; do echo 'abcdefg' >> foo; sleep 1; done

параллельно с

cat foo

Это не то, что вам нужно, потому что должен быть ровно один читатель. Если считывателя нет, пишущая сторона будет заблокирована. Если есть несколько считывателей, каждая строка (или фрагмент, в зависимости от того, как программа производит вывод ), будет просматриваться только одним считывателем, выбранным более или менее случайным образом. Если есть считыватель, и он исчезнет, ​​пишущая сторона не сможет записать и получит SIGPIPE, если она их не отключила.

1
19.03.2021, 02:29

Теги

Похожие вопросы