我最近将我的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
理论上是的,因为请求似乎已排队并且描述符未锁定,因此最好使用TTYBUS Multiplexer 之类的东西,因为并发写入文件/fifo 可能会弄乱换行符等。