我最近将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 的并发写入可能会弄乱换行符等等。