特定のポートに関連付けられたWebサービスを特定のサブドメインに関連付ける
やりたいことは、今まで
http://sample.com:1234/ http://sample.com:8888/
にてアクセス可能であったWebサービスに、当該Webサービス自体を修正せずに、それぞれ
http://service0.sample.com/ http://service1.sample.com/
にてアクセス可能なようにすることです。
以下に説明するように、nginxのバーチャルホスト+リバースプロキシの機能を利用することにより、実現することができました。
前提
nginx
まずは、nginxをインストールします。
sudo apt install nginx
次に、以下のような内容の設定ファイルを作成します。 この設定ファイルは/etc/nginx/conf.d/
に作成する必要があり、ここでは/etc/nginx/conf.d/sample.conf
であるものとします。
server { listen 80; server_name service0.sample.com; location / { proxy_pass http://localhost:1234; } } server { listen 80; server_name service1.sample.com; location / { proxy_pass http://localhost:8888; } }
最後に、設定を反映させるべく、nginxを再起動します。
sudo systemctl restart nginx
DNS
忘れずに、service0.example.com
及びservice1.example.com
の名前解決ができるようにDNSを設定します。
DNSの設定については省略。
macOSにおけるローカルディレクトリ間自動双方向同期
あまりないことかと思いますが、先日、ローカルディレクトリ間の自動双方向同期を実現する必要がありました。
ここでいう「ディレクトリ間の自動双方向同期」とは、2つのディレクトリのうちの一方でファイルの作成、修正、削除等を行うと、もう一方のディレクトリで自動的に対応するファイルの作成、修正、削除等が行われ、その逆も同様のことが行われるといった動作のことです。
以下に説明するように、lsyncdとlaunchdを用いることにより、タイトルのことを実現することができました。 なお、Homebrewがインストールされていることを前提としています。
lsyncd
色々と調べたところ、ローカルのディレクトリとリモートのディレクトリとの間の自動双方向同期を実現するソフトウェアとして、lsyncdが見つかりました。 このソフトウェア、マニュアル1によればローカルディレクトリ間の自動双方向同期にも対応しているみたいです。
というわけで、まずはlsyncdをインストールします。
また、バージョン2.2.1からlsyncdはバージョン3.1以上のrsyncを必要とするようですが、rsync --version
によれば、macOSにデフォルトでインストールされているrsyncはバージョン2.6.9でした(Mojaveにて確認。)。
そのため、新しいバージョンのrsyncもインストールします。
即ち、
brew install lsyncd rsync
次に、以下のような内容のlsyncdの設定ファイルを作成します。
この設定ファイルはどこに作成してもよく、ここでは/path/to/lsyncd.conf
であるものとします。
settings { logfile = "/tmp/lsyncd.log", statusFile = "/tmp/lsyncd.status", nodaemon = true } sync { default.rsync, source = "/path/to/sync0/", target = "/path/to/sync1/", delete = "running", exclude = { '.DS_Store' }, rsync = { binary = "/usr/local/bin/rsync", _extra = { "--owner", "--group" } } } sync { default.rsync, source = "/path/to/sync1/", target = "/path/to/sync0/", delete = "running", exclude = { '.DS_Store' }, rsync = { binary = "/usr/local/bin/rsync", _extra = { "--owner", "--group" } } }
なお、/path/to/sync0/
及び/path/to/sync1/
は、自動双方向同期したい2つのディレクトリのパスです。
これで、lsyncdの準備は完了です。
launchd
真に「自動」双方向同期であるためには、macOSの起動直後から当該双方向同期が有効となっている必要があります。 そこで、macOSを起動すると、上記設定ファイルの内容でlsyncdが自動的に起動するように設定します。 macOSにおいてlsyncdは管理者権限で実行する必要があるために、この設定にはlaunchdを用います。
以下のような内容のlaunchdの設定ファイルを作成します。
この設定ファイルは/Library/LaunchDaemons/
に作成する必要があり、ここでは/Library/LaunchDaemons/com.sample.lsyncd.plist
であるものとします。
なお、/Library/LaunchDaemons/
におけるファイル作成には管理者権限が必要です。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.sample.lsyncd</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/lsyncd</string> <string>/path/to/lsyncd.conf</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
これで、lanuchdの準備も完了です。
ローカルディレクトリ間自動双方向同期の開始
単純に、macOSを再起動すればよいです。
language-applescriptパッケージのコメント記法を変更する
language-applescriptは、AppleScriptでのコーディングをサポートするAtomのパッケージです。
しかしながらこのパッケージ、少なくともバージョン0.3.0においては、editor:toggle-line-comments
コマンドを実行すると、行頭に#
(シャープ)を付加するという挙動をとります。
ちなみに、editor:toggle-line-comments
は、デフォルトのショートカットキーだと⌘/
を入力することで実行されるコマンドです。
これについて、editor:toggle-line-comments
コマンドにより行頭に--
(ハイフン2つ)を付加するようにできないかとパッケージの中身をいじってみたところ、以下のようにすることで実現することができました。
settings/language-applescript.cson
において、
'commentStart': '# '
を、
'commentStart': '-- '
に書き換える。
これだけです。
macOS Mojaveにおけるスリープ中のバッテリー消費
tl; dr
macOS Mojaveにおいてスリープ中に時々妙にバッテリーが消費されることがあったが、pmset
コマンドでstandbydelayhigh
パラメータを調整したら改善された(みたいだ)よという話。
経緯
MacBook (Early 2015)のOSをSierraからMojaveにアップグレードしたところ、スリープ復帰後、バッテリー残量が予想外に少なくなっていることが度々ありました。 正確には、スリープ中のバッテリー消費が激しいとき(例えば、約6時間で約25%の消費)とそうでないときがあるという感じです。 Sierraではそんなことなかったです。 SMCリセットをしても改善されず…
そんなこんなで色々と調べたところ、pmset -g
で表示されるスリープ関連のパラメータが、SierraとMojaveとで異なる事に気付きました。
pmset
のパラメータ
pmset
は、システム環境設定の省エネルギー設定では設定できない、スリープ関連の詳細なパラメータを設定できるコマンドです。
macOSのスリープは、デフォルトではセーフスリープというモードに設定されています。 セーフスリープ・モードでは、スリープ処理が開始されると、まず、メモリ以外の必要でないコンポーネントへの通電を停止し、所定時間経過後に、メモリの内容をストレージに記憶した上で、メモリへの通電も停止するという動作が実行されます。 ここで、スリープ処理開始後のメモリには通電されている状態を「スリープ状態」といい、メモリへの通電も停止された状態を「ディープスリープ状態」と呼ぶことにします。 原則的には、スリープ状態でのバッテリー消費の方が、ディープスリープ状態でのバッテリー消費よりも大きいはずです。
Sierraでは、上記「所定時間」はpmset
のstandbydelay
というパラメータに相当し、デフォルトだと10800
(単位は秒。即ち3時間。)に設定されています。
しかしながら、Mojaveにはstandbydelay
パラメータはなく、その代わりに、standbydelayhigh
とstandbydelaylow
という2つのパラメータが見つかりました。
デフォルト値は、それぞれ、86400
(24時間)と10800
(3時間)です。
man pmset
によれば、要するに、standbydelayhigh
はバッテリー残量が所定値より大きいときの、standbydelaylow
はバッテリー残量が所定値より小さいときの、上記「所定時間」に相当するとのこと。
現象についての考察
どうやら、Sierraとは異なり、Mojaveにおいては、スリープ状態からディープスリープ状態に移行するまでの時間(上記「所定時間」)が、バッテリーの残量によって異なるみたいです。
そして、上記のようなデフォルト値の下では、バッテリーの残量が十分である状況の方が、そうでない状況と比べて、よりバッテリー消費の大きいスリープ状態が長く続くことになります。
即ち、スリープ中のバッテリー消費が激しかったのは、たまたまバッテリー残量が多かったときであり、逆にそうでもなかったのは、たまたまバッテリー残量が少なかったときであったという仮説が成り立ちます。
やったこと
pmset
コマンドにより、standbydelayhigh
パラメータをstandbydelaylow
バラメータと同じ値に設定しました。
詳細には、とっととディープスリープ状態に移行してもらった方がよりバッテリー消費は減るだろうと考え、上記両パラメータを600
(10分)に設定しました。
即ち、
sudo pmset -a standbydelayhigh 600 standbydelaylow 600
その後
本稿執筆時点で設定から数日経ちますが、今のところ、スリープ中の激しいバッテリー消費は再発してないです。
magnifiedのプライバシーポリシー
カメラ(写真と動画の撮影)
- 本アプリは、拡大する画像を撮影するためにカメラ機能を使用しています。
- 本アプリは、撮影した画像を一時的に記憶します。
備考
- 本ポリシーは、予告なく変更されることがあります。