Назад | Перейти на главную страницу

Могут ли многие экземпляры сценария писать на tty (параллельно)?

Я недавно перенес свой upstart скрипты для systemd, в отличие upstart, Я не вижу вывода на tty для услуг началось/остановился. Чтобы получить эту визуальную обратную связь, я добавил что-то вроде

      echo "Starting $UNIT_NAME" > $MYTTY

Где MYTTY это переменная среды, которую я устанавливаю из вывода tty команда. У меня 20 с лишним служб, но почему-то не все сообщения появлялись на моем терминале. Поэтому я изменил строку (просто чтобы проверить) на:

      echo "Starting $UNIT_NAME" | write myuser $MYTTY

И с этим я вижу, что отображаются все сообщения! (конечно, с дополнительным Message from <user>@<hostname> on <term> at <time> ... EOF

Просто чтобы проверить, если write делает что-то особенное, я проверил код в bsdutils и я не нашел ничего особенного, это просто запись символа за символом (с некоторой обработкой специальных символов и CR, LF)

Что не так с :

      echo "Starting $UNIT_NAME" > $MYTTY

? Я также пробовал:

      echo -e "Starting $UNIT_NAME\r\b" > $MYTTY

и т.д. Но сообщения от всех сервисов все равно на экране не отображаются! Это потому что systemd запускает все службы в параллельно что некоторые пишет на tty пропадают !?

-

--РЕДАКТИРОВАТЬ--

следующий раунд, кажется, работает! но я хочу знать, безопасно ли это или есть что-то получше / попроще

 mkfifo /tmp/ttyfifo
 (cat > $MYTTY < /tmp/ttyfifo &) && echo -e 'Starting $UNIT_NAME\r\n'  > /tmp/ttyfifo

теоретически да, поскольку запросы кажутся поставленными в очередь, а дескриптор не заблокирован, вам лучше использовать что-то вроде Мультиплексор TTYBUS , поскольку одновременная запись в файл / fifo может испортить разрывы строк и т. д.