EC2でUbuntu 16.04にデプロイする時に環境変数を設定する場所
Amazon LinuxだとCapistranoでrailsアプリをデプロイする時、特に設定しなくてもデプロイユーザーの環境変数がそのまま設定されていたのに、Ubuntuでは設定されていなかった。non interactive、non loginセッションで実行される場合、Ubuntuでは読み込むファイルが違うようだった。
結論を先に書くと、Ubuntu 16.04では~/.bashrc
はnon interactive、non loginセッションでも読み込まれるので、ここに書いておけば良い。
各種スクリプトの読み込み順
sshでログインした場合
- /etc/profile
- /etc/bash.bashrc
- ~/.profile
- ~/.bashrc
non interactiveセッションの場合
- /etc/bash.bashrc
- ~/.bashrc
この場合、/etc/profile
も~/.profile
も読み込まれない。/etc/profile
では
/etc/bash.bashrc
の読み込み/etc/profile.d/*.sh
の読み込み
が実行されている。
つまり、/etc/profile.d
の配下にrbenvやnodebrewといったツールの環境変数設定用スクリプトを置いても、non interactiveセッションでは適用されない。Capistranoでデプロイする時の落とし穴であった。
さらに、non interactiveセッションの場合([ -z "$PS1" ]
)、/etc/bash.bashrc
ではすぐにreturnされているので、このスクリプトも実質的に何も実行されないのと変わらない。
というわけで、Ubuntu 16.04でnon interactiveセッションでも環境変数などの設定ができる唯一の場所は~/.bashrc
となる。