Мое решение состояло в том, чтобы запустить xvfb в сценарии точки входа Docker:
Xvfb :0 -screen 0 1024x768x24 &
Вы можете поместить эту же строку в какой-нибудь сценарий запуска ОС (, например..bashrc
)скрипт, если вы не используете Docker.
Затем в другом скрипте я экспортировал изображение и вызвал реальную функцию, которую хотел использовать
export DISPLAY=:0
firefox $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, если она их не отключила.