Container-Optimized OSでシェルスクリプトが実行できない
Container-Optimized OS(以下COS)上でシェルスクリプトを実行しようとすると、Permission denied
となり実行できません。
これはシェルスクリプト自体に実行権限がついていても、ディレクトリに実行権限がないからです。
COS上でシェルスクリプトを実行する
COS上でシェルスクリプトを実行する場合は、bashコマンドにスクリプトを渡すと実行できます。
|
|
これだけです。簡単ですね😉
bashコマンドを使わずに実行したい場合は、実行権限があるディレクトリにファイルを移動して実行しましょう。
実行権限があるディレクトリは下記リンク先に記述されています。
セキュリティの概要 - ファイルシステム
しかし使えそうなディレクトリは/mnt/disks
だけでしょうから、基本的にディスクをマウントしないとシェルスクリプトの実行はできないっぽいですね。
COS自体コンテナを作成して運用する使い方を前提としているため、セキュリティ上シェルスクリプトは実行できないようにしているんでしょうね🙄
docker-composeを別途入れて運用する時は、シェルスクリプトを実行したい場合もあるんですが、私の使い方がおかしいのかも知れません😅
私がつまずいたところ
以下は、COSでシェルスクリプトを実行する際につまずいたことを書いてみました。
スクリプト内で登録したエイリアスコマンドを実行したい
docker-composeが正にそうなんですが、予め登録しておいたコマンドを実行したい時があると思います。
その場合はbashの-iオプションを付けてスクリプトを実行すると、エイリアスコマンドが使えます。
例えばmm
コマンドのエイリアスを.bashrcに登録したとします。
|
|
mm
コマンドはecho mofumofu
のエイリアスになります。
mm
コマンドを実行するスクリプトtest.sh
があったとして、
|
|
これをbashコマンドでオプションを付けずに実行するとcommand not found
になってしまいます。
|
|
bashコマンドでエイリアスを使いたい場合は、i
オプションを付けて対話形式にしましょう。
|
|
i
オプションを付けると対話形式になるため、.bashrcをロードしてからシェルスクリプトが実行されるようになります。
詳しくはGNU_bash
をお読みください。
ssh接続でシェルスクリプトを実行する時に、docker-composeがcommand not found
となってしまい頭を抱えてしまいましたが、bashコマンドがどういうものか理解すればとても簡単なことでした。
こういう所は壁にぶち当たらないと調べないので、興味を持って勉強することが大切ですね。
同様に困っている人の助けとなれば幸いです。
実行環境
|
|