ほりひログ

所属組織の製品 (Azure とか) に関連する内容が多めだけど、個人の見解であって、所属組織を代表する公式情報ではないです。

App Service on Linux の Web SSH のコマンド履歴を保存する

はじめに

業務で初めて Angular に触れる機会があり、App Service on Linux で動かすにあたってちょっと苦戦したので、その辺りをまとめようと思ったのですが、 結構めんどくさい問題にあたってしまい、いまだ解決してないので、即席エントリーに変更。

App Service on Linux での SSH ログイン時の話です。 f:id:horihiro:20200223154512p:plain

コマンド履歴を保存してない

Bash のコマンド履歴って、logout 時に ~/.bash_history に書き出されるんですね。知りませんでした。

一方で、App Service on Linux の場合、あまり logout って操作をしないし、そもそも再起動すると、ホーム ディレクトリ (/root) が毎回初期化されるので、ひと工夫しないとコマンド履歴を保持しておくことができません。

やってみたひと工夫を紹介

永続される /home ディレクトリに .bash_history を作って、/root/.bash_histry からシンボリック リンクをはってみました。

あと環境変数 PROMPT_COMMAND を使って、コマンド実行のたびに履歴の Save と Reload をすることで、logout しなくても .bash_history が更新できるようしています。

こんな感じで。

#!/bin/sh
ls /home/.bash_history &>/dev/null || touch /home/.bash_history
ln -s /home/.bash_history /root/.bash_history
echo 'export PROMPT_COMMAND="history -a && history -c && history -r"' >> /root/.bashrc

ただこの設定も再起動するとクリアされます。

スタートアップ コマンド

なので、スタートアップ コマンドを使います。依存症です。
# App Service on Linux をいじる分には便利なんですよ

上のスクリプトの最後に npm start とかの web アプリケーション起動コマンドを追記して完成です。

#!/bin/sh
ls /home/.bash_history &>/dev/null || touch /home/.bash_history
ln -s /home/.bash_history /root/.bash_history
echo 'export PROMPT_COMMAND="history -a && history -c && history -r"' >> /root/.bashrc

# actual startup command
npm start

これでコマンド履歴が記録される設定が、きちんと永続化されるはずです。

お試しあれ。

ではでは。