Cron
從 crond 呼叫 mailx
我遇到了一個問題,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
mailx
to runmailx -t
,它需要在標準輸入上包含標頭的完整電子郵件。從粗略的檢查來看,您似乎無法通過 crond 啟動腳本傳遞帶有參數的命令。所以寫一個shell包裝器
/usr/local/sbin/mailx-t
#!/bin/sh exec mailx -t
並
CRONDARGS="-m /usr/local/sbin/mailx-t"
放入/etc/sysconfig/crond
。