NETGEAR is aware of a growing number of phone and online scams. To learn how to stay safe click here.
Forum Discussion
overtake
May 30, 2016Aspirant
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
それでは
- overtakeAspirant
レス頂きありがとうございます。
その後、少しやり方を変え工夫をしてみましたが、うまくいきません。
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のフォーラムではないとのことで、もし適切なフォーラムをご存知でしたら教えていただけますでしょうか。- overtakeAspirant
解決しましたのでご報告いたします。
DDNS更新スクリプトは、
/home/**ユーザー名**/ddns.sh
として設置。
SSHにrootではなく当該ユーザーでログインし、crontab -e
*/2 * * * * /home/**ユーザー名**/ddns.sh
と記述。
これで無事にDDNS更新がされることが確認できました。
なぜrootではダメだったのかは良くわかってないですが…。
NETGEAR Academy

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