2

ADSL外部IPアドレスを定期的にチェックし、変更されている場合はメールに送信するシェルスクリプトがあります。

#! /bin/sh
NEWIP=`/usr/bin/curl ifconfig.me`
OLDIP=`cat ./current`
logger "$NEWIP ...  $OLDIP"
if [ "$NEWIP" != "$OLDIP" ]; then
    TIME=`/bin/date`
    /usr/bin/sendEmail -v -f ip_watcher@xxxoo.com \
    -s smtp.gmail.com:587 -xu ip_watcher@xxxoo.com -xp xxxxxx \
    -t xxx@xxxxx.com \
    -o tls=yes \
    -u "$NEWIP" \
    -m "$NEWIP  $TIME" -a
    /bin/echo "$NEWIP" > ./current
    logger "IP of bjserver1 has changed ..."
else 
     logger "New IP is the SAME with old. not sending ..."
fi

これは、コマンドラインから実行すると完全に機能します。しかし、cronに入れた後は、NEWIPとOLDIPは常に同じです。理由はわかりませんが、誰か助けてもらえますか?

4

2 に答える 2

2

とは./current?

スクリプトで絶対パスを使用していないため、ファイルは実行された場所にあります。絶対パスを使用する必要があります。

とコマンドライン実行のその他の唯一の重要な違いはcron、スクリプトが実行されるアカウントのユーザーです。アカウント (そうでない場合root) に、要求されていることを実行するための重要な権限があることを確認してください。

または、確立された動的 DNS クライアントを使用して、外部ホスト名を気にする必要がないようにすることをお勧めします。その Web サイトが正直でアップであることを信頼していることに気付いていますよね?

于 2012-02-11T08:37:15.013 に答える
2

スクリプトの開始時に、ディレクトリを正しいディレクトリに変更する必要があります (推測として)。または絶対パスを使用します。

于 2012-02-11T08:38:34.070 に答える