如何通过“墙”无声地广播来自cronjob的警告?

Pav*_*vel 5 cron tty

所以我在 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)

Mat*_*Ife 8

查看墙上的源代码,它说:

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)

这应该完全避免这个问题。但是,您需要在结果输出中提供自己的横幅。