Cron

從 crond 呼叫 mailx

  • June 19, 2016

我遇到了一個問題,gmail 阻止了使用 mailx 發送的電子郵件。我通過設置適當的 ~/.mailrc 解決了這個問題,它看起來像:

set smtp-use-starttls
set nss-config-dir=/home/theuser/.certs
set ssl-verify=ignore
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=xxx
set smtp-auth-password=yyy
set from="rabbitovh@thehologram.com(Rabbit Server)"

所以現在當我執行時:

echo "hi" | mailx xxx@gmail.com

我的電子郵件以使用者身份和 root 身份成功發送。

現在我希望 cron 也能正常工作。我更改了“/etc/sysconfig/crond”以強制它使用mailx,其中:

CRONDARGS="-m /usr/bin/mailx"

我有 ~/.mailrc 設置在:

  • /root/.mailrc
  • /home/theuser/.mailrc
  • /etc/.mailrc

但無論我做什麼,回顯輸出都不會成功通過電子郵件發送。

crontab 看起來像(我已經檢查過,腳本正在執行並完成它們的工作,並且回顯,只是 cron 沒有發送電子郵件):

MAILTO="xxx@gmail.com"

# Every minute check processes are running, restart if necessary and send an email.
* * * * * source /home/theuser/.bashrc; global audit_regular

# Every day, send an email describing the state of the host and its jobs.
0 5 * * * source /home/theuser/.bashrc; global audit_daily

# Every Monday at 7am, archive the logs.
0 7 * * 1 source /home/theuser/.bashrc; global archive_logs

此外,此 crontab 設置在另一台主機上並且可以正常發送電子郵件。

mailx僅當您在命令行上將目標地址傳遞給它時才發送郵件。當您不帶參數執行它時,它會從其標準輸入中讀取互動式命令。請注意,您的測試給它提供了垃圾,這些垃圾已被解釋為命令;其中一些命令可能損壞了您的郵箱、發送了電子郵件等。

Tell mailxto run mailx -t,它需要在標準輸入上包含標頭的完整電子郵件。

從粗略的檢查來看,您似乎無法通過 crond 啟動腳本傳遞帶有參數的命令。所以寫一個shell包裝器/usr/local/sbin/mailx-t

#!/bin/sh
exec mailx -t

CRONDARGS="-m /usr/local/sbin/mailx-t"放入/etc/sysconfig/crond

引用自:https://unix.stackexchange.com/questions/290573