commandとshellでシェルコマンドを実行する
リモートノードで任意のコマンドを実行します
「commandとshellでシェルコマンドを実行する」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
リモートで実際のコマンドを実行する
サーバー上で単純なコマンドをそのまま実行したい場合があります。Ansibleには、そのための2つのモジュール、commandとshellがあります。🖥️
command モジュール
commandモジュールは、リモートホスト上でプログラムを直接実行します。単純な1つのコマンドに適した安全なデフォルトです。
ansible all -m command -a "uptime"command はシェルを介さない
commandはシェルを介さずに実行されるため、パイプ、リダイレクト、$HOMEのような変数を無視します。そのため、予測しやすく安全です。
ansible all -m command -a "ls /etc"shell モジュール
shellモジュールは、ホスト上の実際のシェルを介してコマンドを実行するため、パイプ、リダイレクト、変数をすべて使用できます。
ansible all -m shell -a "cat /etc/*release"パイプにはshellが必要
コマンドでパイプやリダイレクトを使う場合は、shellを選んでください。commandモジュールでは、|が単なる引数として扱われます。
ansible web -m shell -a "ps aux | grep nginx"shell で環境変数を使う
変数を展開できるのはshellモジュールだけです。$HOMEや$PATHのような値に依存するコマンドでは、shellを使ってください。
ansible all -m shell -a "echo $HOME"可能な限りcommandを優先する
デフォルトではcommandを使い、shellの機能が本当に必要な場合だけshellを使用してください。シェルの使用を減らすほど、予期しない動作も減ります。
chdir でディレクトリ内で実行する
どちらのモジュールもchdirを受け取り、実行前にディレクトリを移動できます。コマンド内でcdを使うよりも明確です。
ansible app -m command -a "chdir=/srv git pull"creates で再実行を防ぐ
createsオプションを使うと、指定したファイルがすでに存在する場合にコマンドをスキップできます。処理の重複を避ける簡単な方法です。
ansible app -m command -a "touch /tmp/done creates=/tmp/done"べき等ではない
どちらのモジュールも、実行のたびにchangedを報告します。Ansibleには、指定したコマンドが何を行ったか判断できないためです。対応する実際のモジュールがある場合は、そちらを優先してください。
最後の手段であり、最初の選択肢ではない
shellとcommandは、どうしても必要な場合の手段として扱ってください。serviceやpackageのような専用モジュールが適しているなら、より安全な結果を得るためにそちらを使います。
クイックチェック
パイプを使うコマンドを実行する必要があります。どのモジュールを選ぶべきですか。
まとめ
通常のコマンドにはcommandを使い、パイプや変数が必要な場合はshellを使います。どちらも常にchangedを報告することを覚えておいてください。🖥️
よくある質問
「commandとshellでシェルコマンドを実行する」レッスンは無料ですか?
はい。「commandとshellでシェルコマンドを実行する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「commandとshellでシェルコマンドを実行する」で何を学びますか?
リモートノードで任意のコマンドを実行します ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「commandとshellでシェルコマンドを実行する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ansibleコマンドの構造
- パターン:all、web、host1を対象にする
- commandとshellでシェルコマンドを実行する
- becomeによる権限昇格