0

次のbashスクリプトがあります:

!/bin/bash
# script to send simple email 
#Wait 5 seconds
#sleep 05
# email subject
SUBJECT="SUBJECT"
# Email To ?
EMAIL="EMAIL"
# Email text/message
MYIP=$(curl http://ipecho.net/plain)
LASTIP=$(head -n 1 /home/ubuntu/myip.txt)
echo "Last IP:" $LASTIP
echo "Current IP:" $MYIP
#Check if IPs are the same
if [[ "$MYIP" == "$LASTIP" ]]; then
        echo "IP hasn't changed. Do nothing."
else
        sendemail -f $EMAIL -t $EMAIL -u $SUBJECT -m $MYIP -s smtp.gmail.com -o tls=yes -xu username -xp password
        echo $MYIP > myip.txt
fi

コマンドラインで実行しようとすると、完全に機能します。問題は、「* * * * * /home/ubuntu/myip.sh」のように「crontab -e」に含めると始まります。

その後、動作しません。sendmail が正常に機能していないようです。私がするとき: tail -f /var/log/syslog

Sep 18 21:48:02 gpuserver sendmail[18665]: r8J1m1gO018665: from=ubuntu, size=314, class=0, nrcpts=1, msgid=<201309190148.r8J1m1gO018665@gpuserver>, relay=ubuntu@localhost
Sep 18 21:48:02 gpuserver sendmail[18665]: r8J1m1gO018665: to=ubuntu, ctladdr=ubuntu (1000/1000), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=30314, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]

何か案は?

4

2 に答える 2

0

コマンド ラインからスクリプトを実行すると、現在の環境が利用されます。Cronにはその情報がありません...コマンドラインからすべきことは次のとおりです。

env > me

次に、スクリプトを編集して、スクリプトの先頭に ./me を含めます。そうすれば、cron タスクは同じ環境で実行されます。

于 2013-09-19T02:04:25.217 に答える
0

cron が stdout または stderr に何かを出力すると、cron 自体が電子メールでレポートを送信しようとします。おそらくシステム全体の電子メールが構成されていないため、これがおそらく syslog のエラー メッセージの送信元です。

cron がメールを送信しないようにするには、スクリプトとそれが生成するコマンドが stdout または stderr に何も出力しないようにしてください。これを行う簡単な方法は、「&>/dev/null」を cron 行に追加することです。

crontab の先頭に「MAILTO=""」を追加することもできます。

これはすべて、cron/crontab (man -k cron) のマニュアル ページに記載されています。

于 2013-09-19T04:03:53.927 に答える