Linux
cron 呼叫的 Sendmail bash 腳本無法從標準輸入讀取
我嘗試編寫一個從 nullmailer 的地址覆蓋的小腳本。Nullmailer 有一個選項“allmailfrom”,您可以將郵件地址放入 /etc/nullmailer/allmailfrom,所有發送的郵件都將此地址作為“Return-Path”,但 From 仍然是發送程序的值,例如 pi@raspberrypi
所以我嘗試創建一個小腳本來重寫發件人地址。基本上,您將 sendmail 移動到 sendmail-bin 並將創建的腳本命名為 sendmail。它與命令“mail”一起工作,地址被重寫。但是使用 cron 它不起作用。STDIN 為空,因此無法通過電子郵件接收到 cron 的輸出。系統日誌寫入
/usr/sbin/sendmail: line 11: /dev/stdin: permission denied
這裡是腳本。
#!/bin/bash ######################################### #Beginn change here export NULLMAILER_USER=user export NULLMAILER_HOST=somedomain.com #Ende change here ############################################# export NULLMAILER_FLAGS=ft stdin=$(</dev/stdin) optPosition=0 #defaultvalue when not found while getopts ":f:" from; do case $from in f) optPosition=$OPTIND break ;; esac done arguments=($@) if (($optPosition != 0)); then #-f Option was used arguments[(($optPosition-2))]=$NULLMAILER_USER@$NULLMAILER_HOST set -- "${arguments[@]}" fi echo "$stdin" | /usr/sbin/sendmail-bin "$@"
帶有 NULLMAILER_HOST 和 NULLMAILER_FLAGS=f 的 NULLMAILER_USER 告訴 nullmailer 將其用作發件人地址。該部分有效,請參閱http://manpages.ubuntu.com/manpages/trusty/man1/nullmailer-inject.1.html
在 crontab 中只是
*/1 * * * * echo test
當 nullmailer 的原始 sendmail 存在時,“test”就在郵件的正文中,這是它應該的。那麼為什麼不能從標準輸入讀取這個 bash 腳本呢?
換行
stdin=$(</dev/stdin)
和
stdin=`cat`
不知道為什麼這會產生如此大的不同,重要的是它有效。