[忘備録] Dynamic DNSの設定 w/ Alpine Linux
MyDNS.jpさんのサービスを利用することにしました。設定もとても簡単です。 ここでは、Alpine Linuxでの設定だけメモで書いておきます。
運用方法がユニークでこちらのIPアドレスを定期的にMyDNS.jp側に
- IMAP/POPでのメールチェック
- FTPアクセス(w/ ID and Password)
- HTTP - BASIC認証 or DIRECTアクセス
- GnuDIP
で知らせることで、MyDNS.jp側のDynamicDNS情報をアップデートします。
私は、サイトのサンプルどおりにcronで毎日HTTP Basic認証で知らせる様にしました。
Alpine はBusyBoxを利用するのでcronもBusyBox内のアプレットで実行されている様です。なので、デスクトップなどでよく利用されるディストリビューションとは違い、cronに渡すパラメータも違いました。少しハマったのでメモ。crondのヘルプはこんな感じ↓
❯ crond --help
BusyBox v1.34.1 (2022-02-02 18:21:20 UTC) multi-call binary.
Usage: crond [-fbS] [-l N] [-d N] [-L LOGFILE] [-c DIR]
-f Foreground
-b Background (default)
-S Log to syslog (default)
-l N Set log level. Most verbose 0, default 8
-d N Set log level, log to stderr
-L FILE Log to FILE
-c DIR Cron dir. Default:/var/spool/cron/crontabs
-L がログレベルではないのに注意ですね。
定期的な処理のテーブルは /etc/crontabs
の中にユーザー毎に管理されています。 /etc/crontabs/root
内をみると以下の様になっていました。
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
/etc/periodic
以下にあるフォルダを run-parts
コマンドで実行する様にかかれています。今回は1日に一度、HTTPでベーシック認証を通したいので、dailyフォルダ以下にサイトのサンプルの通り、wgetを実行する様なスクリプトを置いておきます。私は myDns.sh
というファイルを置きました。
#!/bin/sh
/usr/bin/wget -O - 'https://mydns000000:PASSWORDhere@ipv4.mydns.jp/login.html'
#!/bin/sh
の行はとても重要です! これがないとその時間になって、スクリプトファイルを実行しようとしますが、実行できません。スクリプトが実際に動作するかどうかの確認は run-parts
コマンドを利用して実際に動かして試せます。以下の様に
sudo run-parts --exit-on-error /etc/periodic/daily/
run-parts: can't execute '/etc/periodic/daily/myDns.sh': Exec format error
↑の例は #!/bin/sh
の行がない場合のテストです。
使い方としてはコマンドの引数にはディレクトリを指定します。そのディレクトリ内のスクリプトをすべて実行してくれます。
crondサービスはデフォルトで起動するようになってると思います。
Logフォルダの設定
BusyBoxを利用しているAlpine Linuxのcronのログファイルの出力先を設定してみます。
標準だと他のメッセージと一緒に扱われているので、別にしたい人も多いのではないでしょうか?
/etc/conf.d/crond
でコマンドを実行時に渡すオプションを設定できます。ここでは
- /var/log/cron/cron.log としてログファイルを出力
- ログレベルは標準
として設定してみます。以下 /etc/conf.d/crond
を編集します。
# enter the cron options
CRON_OPTS="-c /etc/crontabs -L /var/log/cron/cron.log -l 8"
設定したら再起動してみます。
❯ sudo service crond restart
* Caching service dependencies ... [ ok ]
* Stopping busybox crond ... [ ok ]
* Starting busybox crond ... [ ok ]
❯ ps aux | grep crond
8436 root 0:00 /usr/sbin/crond -c /etc/crontabs -L /var/log/cron/cron.log -l 8
8447 user 0:00 grep crond
うまく設定出来ていると、ログは15分ごとに指定したフォルダ内のファイルに出力されるはずです。
❯ sudo more /var/log/cron/cron.log
[sudo] password for user:
crond: crond (busybox 1.34.1) started, log level 8
crond: USER root pid 8443 cmd run-parts /etc/periodic/15min
↑問題なさそうですね。これで一日に一度、正しく動作しているかどうか、確認できそうです。 何か問題がありそうな場合はLog levelをあげるとよさそうですね。
コメント
コメントを投稿