NETGEAR is aware of a growing number of phone and online scams. To learn how to stay safe click here.

Forum Discussion

overtake's avatar
overtake
Aspirant
May 30, 2016

cronが実行されない

バリュードメインのDDNS更新を自動で行いたいので、以下のようにしました。

 

/etc にディレクトリ /cron.ddns を作成し、

/etc/cron.ddns/ddns というファイルに下記の記述

 

#!/bin/sh

HOST='×××' # ホスト名('*'も可)
DOMAIN='××××××××.net' # ドメイン
PASSWORD='××××××××' # DDNSのパスワード
DNS_SERVER='ns1.value-domain.com' # VALUE DOMAINのネームサーバー

wget=`/usr/bin/which wget`
host=`/usr/bin/which host`
grep=`/usr/bin/which grep`

# 現在のIPアドレスを取得
CURRENT_IP=`$wget -q http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip -O -`


# DNSに登録されているIPをCURRENT_IPでgrepする。
if [ "${HOST}" = "*" ]; then
CHANGE=$($host $DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
else
CHANGE=$($host $HOST.$DOMAIN $DNS_SERVER | $grep -F $CURRENT_IP)
fi

# IPが変更になった場合はCHANGEは空が入ってくるので、登録処理に入る
if [ -z "${CHANGE}" ]; then
# DNSへ登録
$wget -q "http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=$DOMAIN&p=$PASSWORD&h=$HOST&i=$CURRENT_IP" -O -
fi

 

これを直接実行すると、問題なくDDNSが更新されることは確認済み。

 

そこで、crontab -e で、crontabを以下のように編集

 

root@HomeNAS:~# crontab -l
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
*/2 * * * * root cd / && run-parts --report /etc/cron.ddns
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

 

これで、2分に1回、cron.ddnsの中にあるddnsが実行されるかと思うのですが、どうやら実行されていません。

linux自体がほとんど触れたことがなく、いろいろ検索してみましたが解決に至りません。

3 Replies

  • overtakeさん

     

    ここは linux のフォーラムではないので、あまり専門的なことがいえないですが、

    ./etc/cron.ddns/ddns で実行できるということですか?

     

    それであれば、cron に指定するエントリは、./etc/cron.ddns/ddns を指定したほうがいいと思います。

    (可能であれば ddns.sh としたほうがわかりやすいです。)

     

    以下であるとおそらく2行したの行をコピーして、cron.ddns と書き換えただけだと思いますが、

    フルパスで実行しないと意味はないです。

     

    */2 * * * * root cd / && run-parts --report /etc/cron.ddns

    17 * * * * root cd / && run-parts --report /etc/cron.hourly

     

    外部リンクですが、以下のページ等を参照いただくといいと思います。

     

    http://www.server-memo.net/tips/crontab.html

     

    それでは

    • overtake's avatar
      overtake
      Aspirant

      レス頂きありがとうございます。

      その後、少しやり方を変え工夫をしてみましたが、うまくいきません。

      DDNS更新のスクリプト名を ddns.sh とし、パーミッションを755に。
      置き場所は /usr/ddns というディレクトリを作成しその中に。

      これで、 /usr/ddns/ddns.sh とコマンドをたたくと正常にDDNS更新されることを確認。

      crontab -e で、crontabの記述を以下に訂正
      */2 * * * * root /usr/ddns/ddns.sh

      しかしやはり実行されません。

      cronが動いているかどうか確認する方法がweb上にいくつかありましたが・・・

      >cronが動いているか確認
      >/etc/rc.d/init.d/crond status
      ==> /etc/rc.d が存在していない。(rc0.d~rc5.d というディレクトリはあるが・・・)
      ==>find crond としても、crondなんて無いと言われる。

      同じ理由で、 crond start も当然使えない。

      >cronのログを確認
      >vi /var/log/cron
      ==>実行すると新規ファイルの作成になる。

      お手上げです。
      当フォーラムはLinuxのフォーラムではないとのことで、もし適切なフォーラムをご存知でしたら教えていただけますでしょうか。

      • overtake's avatar
        overtake
        Aspirant

        解決しましたのでご報告いたします。

         

        DDNS更新スクリプトは、

        /home/**ユーザー名**/ddns.sh

        として設置。

         

        SSHにrootではなく当該ユーザーでログインし、crontab -e

         

        */2 *   * * *  /home/**ユーザー名**/ddns.sh

         

        と記述。

         

        これで無事にDDNS更新がされることが確認できました。

         

        なぜrootではダメだったのかは良くわかってないですが…。

NETGEAR Academy

Netgearアカデミーでスキルを向上 - トレーニングを受け、認定を取得し、最新のNetgear技術で周囲と差をつけよう!

参加はこちらから!

ProSupport for Business

ネットワーク稼働時間を最大に、ビジネスの安心感を与える包括的なサポートプラン。

 

詳細はこちら