ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ






2019-05-05

MyDNS の更新を自動化する!







ブログを運営するに当たって、自身のサイトとドメインの紐づけに「MyDNS」を使っている方も多いと思います。


しかも、MyDNS の使用は無料なので使わない手はないですよね。


その代わりに1週間に1度の通知作業が必要で、仮に通知を忘れてしまった場合、ドメインがURLに紐づかずブログにアクセスできなくなってしまいます。


しかし、毎週1回手動で MyDNS への通知作業するのは面倒...。


今回は自動でMyDNSに通知する方法を見てみたいと思います。














cron を使って自動化する



サーバの cron (クーロン)という機能を使って自動で通知する設定を実現したいと思います。

cron は、cronの設定ファイルに予(あらかじ)め指定したコマンドやプログラムが記述されたファイルを、決まった時間に定期的に実行してくれる便利な機能です。



通知用シェルスクリプトを作る



先ず、スーパーユーザになります。


[user@hogeHoge user]# su
Password:[パスワード]



次に、「mydns_update.sh」というシェルスクリプトファイルを作成します。


ここでは、シェルスクリプト作成に当たって管理しやすいように「cron_jobs」というディレクトリを、「/home」ディレクトリ直下に設けることにします。


cron_jobs ディレクトリ内に mydns_update.sh が入っているということです。


[root@hogeHoge user]# cd /home
[root@hogeHoge home]# mkdir ./cron_jobs
[root@hogeHoge home]# cd ./cron_jobs
[root@hogeHoge cron_jobs]# vi mydns_update.sh



【vi エディタ mydns_update.sh ファイルの内容】
#!/bin/sh

wget -O - 'http://[マスターID]:[パスワード]@www.mydns.jp/login.html' 

exit 0
~
~
~
~
~
~



このシェルスクリプト内に MyDNS に通知するコマンドを記述します。


通知には「wget」というコマンドを使用します。


上記「wget -O - 'http://[マスターID]:[パスワード]@www.mydns.jp/login.html'」において「-」と、ハイフンだけ記述されているのはダミーのオプションを設定しているためです。


ダミーを設定しないと「missing URL」というエラーが出てしまいコマンドが正常に実行されません。


また、引数に「'http://[マスターID]:[パスワード]@www.mydns.jp/login.html'」と記述されていると思いますが、これがアクセス先のURLです。


「[マスターID]」「[パスワード]」のところにはそれぞれご自身の MyDNS で使用しているものを当てはめてください。


URLの記述の仕方が不自然ですが、こういう書き方なので特に気にしないようにしてくださいね。


また、別なURLの指定の仕方もあります。


#!/bin/sh

wget -O --http-user=[マスターID] --http-password=[パスワード] http://www.mydns.jp/login.html 

exit 0
~
~
~
~
~
~



ということで、wget の引数のURLに関して、以下どちらの記述でもOKといえます。

  • wget -O - 'http://[マスターID]:[パスワード]@www.mydns.jp/login.html'
  • wget -O --http-user=[マスターID] --http-password=[パスワード] http://www.mydns.jp/login.html



cron に通知用シェルを設定



次に、cron により前章で作ったシェルスクリプトが定期的に実行されるように設定します。


[root@hogeHoge]# crontab -e



この「crontab -e」コマンドを実行すると、vi エディタが勝手に起動し cron の設定ファイルが開きます。


【cron の設定ファイルの内容】
#### gzip Apache Logs

0 12 * * * /root/kanri/bin/gzip_ApacheLogs/gziplogs.sh > /dev/null

#mydns
0 3 * * 0 /home/cron_jobs/mydns_update.sh > /dev/null
~
~
~
~
~
~



「0 3 * * 0 /home/cron_jobs/mydns_update.sh > /dev/null」の記述を追加します。


これは、毎週日曜日の3時0分 に mydns_update.sh を実行せよという意味になります。


左側の数字の指定については後述します。


「crontab -l」コマンドで設定ファイルへの追記が保存されているか確かめることができます。


[root@hogeHoge]# crontab -l
#### gzip Apache Logs

0 12 * * * /root/kanri/bin/gzip_ApacheLogs/gziplogs.sh > /dev/null

#mydns
0 3 * * 0 /home/cron_jobs/mydns_update.sh > /dev/null



また、「crontab -r」コマンドで cron の設定を削除できます。


[root@hogeHoge]# crontab -r



削除後、crontab -l コマンドで設定内容を確かめてみると、「no crontab for root」と表示され cron の設定が完全に消えているのが判ると思います。


[root@hogeHoge]# crontab -l
no crontab for root


実は、crontab -e による設定は、コマンドの打ち間違えによる設定内容の消失を招くのでリスクがあります。


折角、今まで設定してきた内容がパーになってしまうため、crontab -e による設定以外の方法が推奨されます。


そこで、別にファイルを設けて、そこに cron の設定を記述します。



別に設定ファイルを設ける



直接「crontab -e」コマンドを使って cron の設定を行うのは危険ということで、専用のディレクトリに別のファイルを設ける方法を見ていきます。


ディレクトリは、「/etc/cron.d/」 で、そこに「my_cron_jobs.cron」というファイルを作成します。


ちなみに、拡張子は「.cron」でなくても好きな名前でOKです。


[root@hogeHoge]# cd /etc/cron.d/
[root@hogeHoge cron.d]# vi ./my_cron_jobs.cron



【my_cron_jobs.cron ファイルの内容】
#mydns
0 3 * * 0 root /home/cron_jobs/mydns_update.sh > /dev/null
~
~
~
~
~
~



crontab -e コマンドではなく、別ファイルに記述した設定を読み込ませる場合、日付とコマンドの間にユーザの種類を入力してください。


  1. 0 3 * * 0 root /home/cron_jobs/mydns_update.sh > /dev/null


「/etc/cron.d/」ディレクトリ下にファイルを置くだけで新たに設定した内容が勝手に動作するのでこれで終わりです。



cron でシェルが正常に動くか確認



先ず、サーバ内にある cron のログを確認します。


[root@hogeHoge]# tail -f /var/log/cron
May 26 03:00:36 [サーバ名(ホスト名)] CROND[2992]: (root) CMDOUT (2019-05-26 03:00:36 (57.9 MB/s) - written to stdout [643])



「/var/log/cron」ファイルにログが表示されます。


上記のようなログが記述されていれば送信成功です。


また、念のため正常に動作されたかを「MyDNS」にログインして確認します。


【MyDNS ログイン後ページ】



先ず、ログインした後、「LOG INFO」をクリックします。


ページ遷移後、ログが表示されるので、「DNSINFO UPDATE」という記述があれば、cron 設定は成功です。


cron の時間を現在時間から1分後などに設定して、本当に自動で通知できるか試してみてもいいでしょう。



MyDNS はログに通知が反映されないときがある



MyDNS は、ログに通知した内容が反映されないことがあります。


そのときは、面倒ですが、24時間後にもう一度 MyDNS にアクセスしてログを確かめてみてください。


しかし、24時間経過してもログに全く反映されないときがあります。


そのときは、もう一度、cron で通知を送ってみてください。


おそらく、MyDNS のアクセスログに反映されるはずです。


反映されない原因は、1日の間に何回も通知を実行してしまうことにあります。


MyDNS への自動通知をテストしている内に何度も送ってしまうことがあるので、そのときは翌日に改めて動作テストしてからログを確認するようにしましょう。











cron の時間設定の記述



続いて、cron の設定ファイルにコマンドを定期実行するための条件を指定する方法について見てみたいと思います。


  • 分 時 日 月 曜日 <コマンド>


という順番に数字を記述して条件を指定します。



「曜日」についても数字を使って表します。


  • 日: 0,7 月: 1 火: 2 水: 3 木: 4 金: 5 土: 6


日曜日に関しては、「0」か「7」どちらの数字で指定してもOKです。



時間指定の例



時間の指定の仕方は、以下のように行います。


  • 5 8 1 7 * <コマンド>

    7185 分 にコマンドを実行


  • 0 5 * * 0 <コマンド>

    毎週 日曜日 50 分 にコマンドを実行


  • */10 * * * * <コマンド>

    10 分毎にコマンドを実行


  • 0-5 5 * * * <コマンド>

    毎日 501234 または 5 分にコマンドを実行


  • 0,1,2 7 * * * <コマンド>

    毎日 701 または 2 分にコマンドを実行





最後に



cron は手動で行っていた作業を自動化できるので便利な機能です。


是非使ってみてください。


それでは、続きはまた次回にご期待を!














プロフィール

ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ