Для тех, кому это необходимо, существует ряд возможных рабочих -обходных путей. Некоторые из них могут не относиться к вашей ситуации.
reboot
, как предложил cas . exit
, чтобы выйти из chroot, и reboot
, как предложил Кшиштоф Стасяк . ssh localhost
иreboot
(аналогично #1 выше ). reboot
сбоя. )Сам я этого не пробовал. echo b |sudo tee /proc/sysrq-trigger
. Используйте это в крайнем случае, так как я не уверен, что он сбросит файлы на диск. Проблема возникла из-за того, что к процессу не был подключен телетайп. TTY — это устройство, используемое процессом для взаимодействия с целью ввода и вывода. Поскольку не было TTY, процесс Unimrcp использовал свой fd 1 (stdout )для связи с одним из потоков (fd 1 был присоединен к каналу процесса ). Следовательно, на стандартный вывод (были отправлены некоторые ненужные символы, точно не знаю, почему? ).
После присоединения tty к процессу процесс fd 1 указал на /dev/pts/0, который является псевдотерминалом. Теперь я могу видеть журналы в удобочитаемом формате.
Эти строки добавлены в файл yaml модуля. который решил проблему
containers:
- name: unimrcp
tty: true
stdin: true
Расширения переменных нужно заключать в двойные кавычки.
В команде
sed -i 's+<headers>.*</headers>+''<headers>'$LOG_HEADERS'</headers>+g' /usr/local/unimrcp/conf/logger.xml
расширение переменной $LOG_HEADERS
не заключено в кавычки. Это означает, что если переменная LOG_HEADERS
содержит пробелы, она будет разбита на несколько слов (, и каждое слово будет дополнительно подвергаться подстановке имени файла ).
Это означает, что если $LOG_HEADERS
является строкой A B C
, вы получите команду
sed -i 's+<headers>.*</headers>+''<headers>'A B C'</headers>+g' /usr/local/unimrcp/conf/logger.xml
В этой команде B
, C</headers>+g
и /usr/local/unimrcp/conf/logger.xml
будут приняты как пути к файлам для обработки, а выражение sed
s+<headers>.*</headers>+<headers>A
, применяемое к этим файлам, содержит синтаксическую ошибку.
Всегда двойные кавычки при раскрытии переменных. Есть случаи, когда двойные кавычки расширения не нужны, но гораздо проще помнить всегда использовать двойные кавычки.
Ваша команда будет выглядеть так:
sed -i 's+<headers>.*</headers>+''<headers>'"$LOG_HEADERS"'</headers>+g' /usr/local/unimrcp/conf/logger.xml
или
sed -i "s+<headers>.*</headers>+<headers>$LOG_HEADERS</headers>+g" /usr/local/unimrcp/conf/logger.xml
(на самом деле будет только одна команда sed
, так как вы можете легко объединить несколько правок в один вызов, либо разделив каждое выражение с помощью ;
, либо задав их в отдельных -e 'expression'
аргументах ).
Вам также необходимо заключать расширения в двойные кавычки, когда вы используете их с echo
.
Также обратите внимание, что синтаксический анализатор XML намного проще и более надежен. Чтобы заменить содержимое тега <header>
, вы можете, например, использовать
$ cat file.xml
<root>
<header>hello</header>
</root>
$ xmlstarlet ed -u '//header' -v "new data" file.xml
<?xml version="1.0"?>
<root>
<header>new data</header>
</root>
Вопросы и ответы по цитированию:
Кроме того, в вашем скрипте отсутствует начальный символ#
-в самой первой строке, и вы, кажется, игнорируете, успешно ли ваш cd
изменяет рабочий каталог или нет (вы действительно хотите установить рабочий кстати каталог /usr/local/unimrcp/bin
? ).