先日iPad miniとiPhone 6sを導入してから、
うちの古いルーターが2日間隔くらいで再起動しないと
通信が遅くなってネットに繋がらなくなるようになった。
どうやら新しいiPadとiPhoneはWi-fi環境だとガシガシ通信するようで、
ルーターのキャパをすぐに超えてしまうみたいだ。
ルーターを新しくすればすぐに解決しそうな話だが、
とりあえず1日1回再起動すれば快適に使えるようなので、
ルーターを再起動するスクリプトを書いてみた。
幸いうちのルーターはWebブラウザで操作できる管理画面を持っており、
BASIC認証でログインして特定のURLを叩くと再起動できるので、
httpアクセスするスクリプトを書いて毎晩実行されるように
定期処理の設定をしておけば自動化できそうだ。
ついでに、ちゃんと定期処理が実行されてるか確認できるように
再起動前に「これから再起動しますよ」という通知を
チャットワークに送るようにしてみる。
Gruntの「grunt-http」パッケージでBASIC認証する
調べてみると「grunt-http」パッケージを使えば
BASIC認証経由でURLを叩けそうなので、
Gruntスクリプトを作ってみた。
「router_rebooter」という名前のフォルダを作成して、
下記のファイルを保存する。
package.json
{ "name": "router_rebooter", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "grunt": "^0.4.5", "grunt-http": "^2.0.1" } }
Gruntfile.js
module.exports = function(grunt) { grunt.initConfig({ http: { reboot: { options: { url: "<ルーターの再起動用URL>", qs: { "action": "Reboot" //うちのルーターで再起動する際に必要なパラメータ }, auth: { username: "<BASIC認証ユーザー名>", password: "<BASIC認証パスワード>", sendImmediately: false } } }, notify: { options: { url: "https://api.chatwork.com/v1/rooms/<チャットワークのルームID>/messages", method: "POST", headers: { "X-ChatWorkToken": "<チャットワークAPIキー>" }, form: { body: "ルーターを再起動します" } } } } }); grunt.loadNpmTasks("grunt-http"); grunt.registerTask("default", "http"); grunt.registerTask("reboot", ["http:notify","http:reboot"]); };
ファイルを作成したら、
npm install
で必要なパッケージをダウンロードする。
これで、下記のコマンドを実行すればチャットワーク通知してから
ルーター再起動を実行してくれる:
grunt reboot
Macのcrondで定期処理設定
今回は自宅のMacに設定したので、Macでの設定方法となる。
(Windowsでの定期処理設定はまた他の記事で試したい)
Macはcronが使えるので、上記の「grunt reboot」を
呼び出す処理をcrontabで設定する。
色々試して、下記の設定でどうにか動くようになった。
nodeコマンドとgruntコマンドが「/usr/local/bin」にあって、
今回作成した「router_rebooter」が「/Users/pirosuke/workspace」にある想定。
毎晩「0:00」に起動する。
0 0 * * * export PATH=$PATH:/usr/local/bin; cd /Users/pirosuke/workspace/router_rebooter; /usr/local/bin/grunt reboot;
cronはデフォルトで「/usr/bin」の中しか探してくれないようで、
gruntコマンドだけを記述すると「nodeコマンドが見つかりません」という
エラーが表示される。
実行前にPATH設定を追加することで、
「/usr/local/bin」内のnodeコマンドを
実行してくれるようにした。
おわり
BASIC認証は他でも使う機会があるだろうから、覚えておこう。
cronの設定もこの書き方を覚えておけば、
今後Gruntで作成したスクリプトを定期実行したい時は使いまわせそうだ。