Я недавно перенес свой 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 может испортить разрывы строк и т. д.