linux由来の本番・テスト環境を識別する
需要
webサービス等の制作する時、本番環境とテスト環境を判断して、動作を切り替えたい場合がある。
プログラミング言語によっては、標準APIがこれらを代替してるが(概ねOSの区別までは比較的容易)、linux系については代表的な方法がある。
GAE/GCP Python dev_appserver or cloud
これは小生の独自調査による。サーバサイドの環境変数をダンプして両者を突き合わせた。どうやら GAE_ENV がそうらしいとわかる。
変数名 | dev_app | クラウド |
---|---|---|
PYTHONHASHSEED | random | None |
PYTHONCOERCECLOCALE | 0 | None |
GAE_ENV | locald_ev | standard |
GAE_VERSION | 20201006t022402 | 2 |
PYTHONUNBUFFERED | None | 1 |
PYTHONDONTWRITEBYTECODE | None | 1 |
DEBIAN_FRONTEND | None | noninteractive |
GAE_VERSIONの内容がまるで違うのも気にはなる。
なおこの調査は2020年下旬に行っている。最新版では挙動が違う可能性がある。
docker内外
概ねoverlayfsをチェックすれば識別できるとは思われるが、procfsを見るのが無難なようだ。
shell - How to check if a process is running inside docker container - Stack Overflow
$ cat /proc/self/cgroup
9:hugetlb:/
8:perf_event:/
7:blkio:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct:/
2:cpu:/docker/25ef774c390558ad8c4e9a8590b6a1956231aae404d6a7aba4dde320ff569b8b
1:cpuset:/
$ cat /proc/1/cgroup
8:perf_event:/
7:blkio:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct:/
2:cpu:/docker/25ef774c390558ad8c4e9a8590b6a1956231aae404d6a7aba4dde320ff569b8b
1:cpuset:/
ちなみに小生のarchlinuxホストOSだとこうなる
$ cat /proc/1/cgroup
12:devices:/init.scope
11:pids:/init.scope
10:freezer:/
9:rdma:/
8:blkio:/init.scope
7:cpuset:/
6:hugetlb:/
5:perf_event:/
4:net_cls,net_prio:/
3:cpu,cpuacct:/init.scope
2:memory:/init.scope
1:name=systemd:/init.scope
0::/init.scope
linuxディストリビューション
/etc/os-release ファイルが共通規格であり、これを観るのが確実なようだ。
構文は、シェルスクリプトの変数定義に酷似しており、bash等で読み込むのに都合が良い。
How to check os version in Linux command line - nixCraft
ubuntu|debianでの例
$ more /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
manjaro/archlinxでの例
$ cat /etc/os-release
NAME="Manjaro Linux"
ID=manjaro
ID_LIKE=arch
BUILD_ID=rolling
PRETTY_NAME="Manjaro Linux"
ANSI_COLOR="32;1;24;144;200"
HOME_URL="https://manjaro.org/"
DOCUMENTATION_URL="https://wiki.manjaro.org/"
SUPPORT_URL="https://manjaro.org/"
BUG_REPORT_URL="https://bugs.manjaro.org/"
NAME=
VERSION=
ID=
ID_LIKE=
VERSION_CODENAME=
VERSION_ID=
PRETTY_NAME=
ANSI_COLOR=
CPE_NAME=
HOME_URL=, DOCUMENTATION_URL=, SUPPORT_URL=, BUG_REPORT_URL=, PRIVACY_POLICY_URL=
BUILD_ID=
VARIANT=
VARIANT_ID=
LOGO=
Discussion