所以我在 Ubuntu 16.04 机器上有这个 cronjob,它以
if ...
echo "warning" | wall 2>&1 > /dev/null
fi
Run Code Online (Sandbox Code Playgroud)
我用来警告所有用户有关正在发生的某些操作。尽管我将其输出重定向到/dev/null
,但脚本以某种方式设法输出
wall: cannot get tty name: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)
它通过电子邮件发送到根帐户。怎么wall
静音?广播有效,但我不想在我的根邮箱中有这些电子邮件。
# wall -V
wall from util-linux 2.27.1
Run Code Online (Sandbox Code Playgroud)
查看墙上的源代码,它说:
259 if (print_banner == TRUE) {
...
...
271 where = ttyname(STDOUT_FILENO);
Run Code Online (Sandbox Code Playgroud)
此ttyname
调用是导致您出现问题的原因,因为 cron 不运行 TTY。这样做是因为 tty 名称在横幅消息 IE 中
Broadcast message from user@host (pts/0)
Run Code Online (Sandbox Code Playgroud)
根据逻辑,但是如果您不告诉它打印横幅,它就不会尝试此操作。通过wall
像这样调用来避免这个问题是微不足道的:
if ...
echo "warning" | wall -n 2>&1 > /dev/null
fi
Run Code Online (Sandbox Code Playgroud)
这应该完全避免这个问题。但是,您需要在结果输出中提供自己的横幅。
归档时间: |
|
查看次数: |
1703 次 |
最近记录: |