タスクスケジューラを使う(1)~DiskStation DS218j
NOMIは自宅にいなかったのでカミさんの言葉を信じるしかないのですが、
「家にカミナリが落ちてテレビのあたりでなんかバチッていったよー。もう死んだと思ったー。」
生きてるやん、という突っ込みはともかく、カミさんの代わりに我が家のルーターYAMAHA NVR500のLANポートの2番が死んでました。微妙な死に方ですね。どう壊れたのかはわかりませんが、エラーが出るでもなく、ケーブルを挿しても全く無反応で、最初からその2番コネクタは存在しなかったかのような感じの壊れ方です。
まあとりあえずは2番コネクタさえ使わなければ支障はないのですが、もしも落雷による異常電流が故障の原因だとしたら、そのうち他の部分も壊れてしまうかもしれません。
というわけで、ブリッジモードで使っていたNECのWi-FiアクセスポイントWG1200HSをルーターモードに変えて、大急ぎでPPPoE設定やらポートマッピング設定やらをやって、動作確認をして設定を保存。これでNVR500が壊れてもインターネット接続だけは担保できるようになりました。
ちなみに下がNVR500、上がWG1200HSです(埃っぽくてすみません)。
とはいうものの、ルーターの機能も性能も、WG1200HSはNVR500には全く太刀打ちできないわけで、自宅のSynology DiskStation DS218jからホームページを配信するという仕事だけでもWG1200HSには相当重荷ではあります。
WG1200HSはトラブルもほとんどなく、優秀なWi-Fiアクセスポイントなのですが、そこは専門外ということでしょうね、
また、NOMI宅のルーターをNVR500からWG1200HSに変更した場合、NVR500ではできるのにHG1200HSではできないことがいくつかあります。
- 静的DNSレコードの登録
【LAN内から自宅公開Webサーバーにアクセスする方法】でも説明した通り、自宅内のLANにある公開サーバーに最も簡単に接続する手段が、ルーターに静的DNSレコードを書いてあげることです。
NVR500では単純に、
ip host wwq.mydns.jp 192.168.77.201
と書いてあげるだけで良いのですが、WG1200HSにはそういう設定はできません。パソコンならhostsへの追記で対応できますがスマホはそうはいかないので困ったものですが、Synology DiskStation DS218jでDNSサーバーを動かせば問題は解決します。
- DHCPサーバー
WG1200HSが実装しているDHCPサーバー機能では、ゲートウェイと参照DNSを任意に設定することができないようです。ゲートウェイはともかく、WG1200HSをDHCPサーバーとしてLAN内のパソコンやスマホに接続情報を割り当てようとすると、参照DNSサーバーはWG1200HS自身になってしまうようです。そうすると、せっかくDS218jでDNSサーバーを稼働させてLAN内公開サーバー問題を解決しても、パソコンやスマホがDS218jのDNSサーバーを参照することができません。ですが、WG1200HSのDHCPサーバーを停止することは可能なので、その代わりにDS218jのDHCPサーバーを動かせば問題は解決します。
- ルーター独自のダイナミックDNS
当然のことですがルーターのメーカーYAMAHAのDDNSサービス「ネットボランチ」が使えなくなります。が、DS218が実装しているDDNSサービスを既に使っていますので、使えなくなっても特に困ることはないでしょう。
と、ここまではWG1200HSの弱点をすべてDS218jが肩代わりしてくれるようです。DS218j様様ですね。
しかしまだ問題があります。
- ダイナミックDNSサービス"MyDNS"へのIPアドレス通知
現在はNVR500のLuaスクリプトを使って通知しています。
WG1200HSにはそれに代わる仕組みがありません。ここをどうにかしないとこのサイトの運営ができなくなってしまいますが、DS218jを使ってMyDNSへIPアドレスを通知する方法が見つかれば問題解決です。
というわけでここからが本題です。お待たせしました。
DSMにはメーカーのSynology社が提供しているDDNSの他に、著名なDDNSの通知機能に対応しています。
ところが残念なことにNOMIが利用させていただいているMyDNSには対応していないようです。
自宅サーバーやVPSに使える無料のダイナミックDNS (Dynamic DNS) | MyDNS.JP
日本では結構メジャーなサービスだと思うのですが、Synology社から見たらローカルサービスの一つに過ぎない、ということでしょう。
とはいえ、そもそもDDNSサービスへの通知は専用ツールなど使わないでも良いのが普通です。特にMyDNSは、通知方法の選択肢が多く、ユーザーが色々な方法を工夫して対応している、という感じです。利用者が多いのでネット上の情報も豊富です。
https://www.mydns.jp/?MENU=030
例えばメールクライアントを立ち上げといて一定時間ごとに受信要求するとか、そういう単純な方法でも良いのがありがたいサービスですね。
UNIX系のOSで自宅サーバーをやっている人が良く使うのが、wgetコマンドを作ったスクリプトを書いてcrontabで定期的にHTTPで認証を行う、というヤツです。
GNU Wget
GNU Wget(あるいは単に Wget)はウェブサーバからコンテンツを取得するダウンローダであり、GNUプロジェクトの一部である。その名称はワールド・ワイド・ウェブ(WWW)とプログラムの主要な機能であるデータ取得を意味する英語の「get」から派生したものである。現在Wgetはウェブ閲覧のために用いられるTCP/IPに基づいたもっともポピュラーなプロトコルである、HTTP、HTTPS及びFTP によるダウンロードが利用可能である。
crontab
crontab
(クロンタブ、あるいはクローンタブ、クーロンタブとも)コマンドはUnix系オペレーティングシステム (OS) において、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。標準入力からコマンド列を読み取り、crontabと呼ばれるファイルにそれを記録する。この記録を元に定時になると、その命令内容を読み取り、実行が行われる。cronという名称はギリシア語のクロノス (χρόνος) に由来するという説がある(Command Run ON の略という説も)。日本語ではクーロンという読みが慣習的に広く用いられているが、英語では通常クロンまたはクローンと発音する[1]。出典:ウィキペディア
wgetもcrontabもほとんどのUNIX系ディストリビューションに標準でインストールされていますからとても都合がよいわけで、公式サイトにも設定方法が載っています。
https://www.mydns.jp/?MENU=040
もちろん、ネットを調べると実施例は山ほど出てきます。
要はこれをDSMでやれるようにしてしまえば良いわけですが、DSMでは「タスクスケジューラ」という形でcrontabの機能を使えるようになっています。
では設定です。
DSMにログインして[コントロールパネル]を開きます。
「タスクスケジューラ」を開きます。
ここの設定の実体が本当にcrontabなのかどうかは、コンソールからログインして"/etc/ctontab"の記述を見てみるとわかります。
内容を照合してみると、「タスクスケジューラ」の一項目目の「DSM自動更新」がcrontabの、
15 1 * * 2,5 root /usr/syno/bin/synoschedtask –run id=2
「タスクスケジューラ」の二項目目の「S.M.A.R.T.テスト」が
0 0 9 * * root /usr/syno/bin/synoschedtask –run id=1
と一致しています。残る一項目、
0 0 1 * * root /usr/syno/bin/syno_disk_health_record
は該当する項目が「タスクスケジューラ」にはありませんが、crontabに記述されている実行スケジュールが「毎月1日の0:00に実行」ですから答えは簡単、
[ストレージマネージャ]から毎月一日に送られてくるレポート【DSMの健康状態月次レポート~DiskStation DS218j】のための実行スケジュールの記述ですね。さて、crontabの記述方法を知っていればコンソールから設定をタイピングしても良いのですが、GUIからの設定が基本のシステムはできるだけGUIの流儀に従ったほうがトラブルが少ないので、ここははやる気持ちを抑えてGUIから設定を行います。
まず、MyDNSの公式サイトの記述例を見ると、
# cat > /etc/cron.every5min/mydns
#!/bin/sh
#
# TEST1.MYDNS.JP
/usr/bin/wget -O – 'http(s)://mydns111111:tp5YgZv4@www.mydns.jp/login.html’
#
#
# TEST2.0am.JP
/usr/bin/wget -O – 'http(s)://mydns222222:Ex8ZVkm7@www.mydns.jp/login.html’
#
#
# TEST3.0T0.JP
/usr/bin/wget -O – 'http(s)://mydns333333:QC6L2SF8@www.mydns.jp/login.html’
となっていますので、リクエストがひとつなら、
/usr/bin/wget -O – 'https://mydns[MyDNSのマスターID]:[MyDNSのパスワード]@www.mydns.jp/login.html’
の一行で済みます。つまりDSMでwgetコマンドだけ使えれば良いわけですが、DSMの中を実際に調べてみると、
と、DSMの場合パスは記述例と異なり"/bin/wget"であることがわかりますので、記述すべきコマンドラインは、
/bin/wget -O – 'https://mydns[MyDNSのマスターID]:[MyDNSのパスワード]@www.mydns.jp/login.html’
となります。
DSMの「タスクスケジューラ」に戻って、
「作成」→「予約タスク」→「ユーザー指定のスクリプト」と開きます。
[タスク:]には自分でわかるように名称を(日本語は使えないようです)、[ユーザー:]はタスクを実行するユーザーアカウントですが、デフォルトの"root"のまま、「有効」にチェックを入れて隣の「スケジュール」タブを開きます。IPアドレス通知の時間間隔については、MyDNSの記述例に従えば5分で良さそうですが、あまり頻繁にやって負荷を増やすのも申し訳ないので10分間隔にします。
[次の期間実行]で「毎日」を選択し、[初回実行時刻:]を"00″、[スケジュールサイクル:]を"10分ごと"、[最終実行時刻:]を"23:50″に設定します。これで「毎日00:00にスタートして10分おきに23:50まで実行。」となります。隣の「タスク設定」を開きます。
「Eメールで詳細な実行情報を送信」にチェックを入れ、「Eメール:」にメールアドレスを指定しておくと、タスクが実行されるごとに結果がメールで送られてきます。すると10分毎にメールが送られてきますが、「スクリプトが異常終了した場合にのみ実行情報を送信」にもチェックを入れておくと、wgetがエラーで終了した場合などに限定してメールが送られてくるようになります。
10分毎に同じ内容のメールが送られてくると相当にうざったいので、動作確認が終わったら「スクリプトが異常終了した場合にのみ実行情報を送信」にチェックを入れるようにすると良いです。
そして[ユーザー指定のスクリプト]の欄に、
/bin/wget -O – 'https://mydns[MyDNSのマスターID]:[MyDNSのパスワード]@www.mydns.jp/login.html’
を記述し、「OK」をクリックして設定を保存します。
設定が追加されました。これで10分おきに自動実行されますが、タスクを選択して「実行」をクリックすると、
実行時刻を待たずにタスクを実行してみることができます。
先の「タスク設定」タブでメール送信を有効にし、「スクリプトが異常終了した場合にのみ実行情報を送信」にチェックを入れなければ、タスクが正常に実行されていても、
こういうメールが送信されてきます。
また、「設定」をクリックし、
[保存先:]を指定して[出力結果を保存]にチェックを入れて「OK」をクリックすると、指定したフォルダにタスクの実行結果を保存することができます。実行結果はタスクのID番号(後述)のフォルダの下に、タスクが実行されたときのUNIX時間でそのままフォルダが作られ、
UNIX時間
UNIX時間(ユニックスじかん)またはUNIX時刻(ユニックスじこく、UNIX time(ユニックスタイム)、POSIX time(ポジックスタイム))とはコンピューターシステム上での時刻表現の一種。UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日午前0時0分0秒から形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの)として表される。GPS時刻などとは異なり、大多数のシステムでは、本当の経過秒数を表すものではない[1]。
出典:ウィキペディア
フォルダの中に、
実行したスクリプトと実行結果の標準出力がテキストファイルで保管されます。
この状態で"/etc/crontab"の記述はどうなっているかというと、
と、crontabの記述ルールに変換されてきちんと設定されていました。出力結果の保存先のフォルダ名(タスクのID番号)はここの"id=3″で確認することができます。
とりあえずMyDNSへのIPアドレス通知設定はこれで完了です。
ただし、まだNVR500は壊れてはいませんので、
と、作成したタスクを無効化しておき、必要な時に稼働させるようにしておきます。
大事なのは転ばぬ先の杖、ですね。
ディスカッション
コメント一覧
はじめまして、ネットワーク、NASの勉強に大変役立っています。
ここへ記入するとどうなるか試しとひとつ教えていただきたいのですがこのぺーじ下に(次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。)がありチェックボックスに入れるとどこへ保存されますか?解除する方法おしえていただくことはできますか?
こんにちわ。
「次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。」にチェック入れてコメントを送信すると、お使いのブラウザのCookieにそれらの情報が保存されます。保存したくない場合はチェックを入れずに送信してください。
一旦ブラウザに保存してしまった場合で他のCookie情報を消したくない場合は、「特定のサイトのCookieを削除する」で検索してお使いのブラウザのCookieの削除方法を調べ、”wwq.mydns.jp”のCookie情報を削除してください。
よろしくお願いいたします。