Cron

如何通過“牆”靜默廣播來自 cronjob 的警告?

  • November 17, 2016

所以我在一台 Ubuntu 16.04 機器上有這個 cronjob,它以

if ...
 echo "warning" | wall 2>&1 > /dev/null
fi

我用它來警告所有使用者發生的某些操作。儘管我將其輸出重定向到/dev/null,腳本以某種方式設法輸出

wall: cannot get tty name: Inappropriate ioctl for device

它通過電子郵件發送到 root 帳戶。我怎樣才能wall保持沉默?廣播有效,但我不想將這些電子郵件放在我的根郵箱中。

# wall -V
wall from util-linux 2.27.1

看看牆上的原始碼,它說:

259          if (print_banner == TRUE) {
...
...
271                  where = ttyname(STDOUT_FILENO);

ttyname呼叫是您的問題的原因,因為 cron 不執行 TTY。這樣做是因為 tty 名稱在橫幅消息 IE 中

Broadcast message from user@host (pts/0)

根據邏輯,但是如果您不告訴它列印橫幅,它不會嘗試此操作。通過像這樣呼叫來避免這個問題是微不足道的wall

if ...
 echo "warning" | wall -n 2>&1 > /dev/null
fi

這應該完全避免這個問題。但是,您需要在結果輸出中提供自己的橫幅。

引用自:https://serverfault.com/questions/814769