许多脚本实例可以写入 tty(并行)吗?

许多脚本实例可以写入 tty(并行)吗?

我最近将upstart脚本迁移到了systemd,与此不同upstart,我没有看到tty服务上的任何输出开始/停止为了获得视觉反馈,我添加了类似

      echo "Starting $UNIT_NAME" > $MYTTY

其中MYTTY是我从命令输出中设置的环境变量tty。我有 20 多个服务,但不知何故并非所有消息都出现在我的 tty 上。因此,我将行(仅用于检查)更改为:

      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

答案1

理论上是的,因为请求似乎已排队并且描述符未锁定,所以最好使用类似TTYBUS 多路复用器因为对文件/fifo 的并发写入可能会弄乱换行符等等。

相关内容