У меня есть услуги, которые должны показать свои старт / стоп статус в pty
, поэтому я делаю следующее:
$(tty)
/tmp
)Вот функция bash, которая делает это:
show_tty() {
[[ -z $VTTY ]] && return
local MSG="$1"
local FIFOTTY=/tmp/vfifo
if [[ ! -p $FIFOTTY ]]; then
mkfifo $FIFOTTY
fi
chmod a+rw $FIFOTTY 2>/dev/null
(echo -e " * ${MSG}" > $FIFOTTY & disown)
/usr/bin/timeout -k 1 1 /bin/bash -c "/bin/cat > $VTTY < $FIFOTTY" 2>/dev/null
return 0
}
Проблема в том, что после того, как некоторые службы выписывают статус и его показывают, несколько из них заблокированы, когда я бегу strace
, Я вижу openat(AT_FDCWD, "/tmp/myfifo"...
Я пробовал различные фокусы, чтобы переупорядочить echo
/ read
, есть это timeout
а еще несколько экземпляров продолжают работать, и если я это сделаю cat /tmp/myfifo
, все они прекращаются!
Что я здесь делаю не так? Раньше я пытался писать прямо в pty
это было слишком ненадежно, я иногда получал некоторые сообщения, и многие терялись, поэтому я добавил fifo.
Я могу рассмотреть что-то другое, кроме fifo (скажем, unix sock), если механизм надежен, не блокируется и может работать с командами оболочки. Моя основная цель здесь - распечатать сообщение из файлов модуля (или скрипта, созданного из файлов модуля) в tty
.