[解決済み] Fabricがエラーになったときにタスクを継続させる方法
2023-02-17 07:15:59
質問
複数のリモートサーバーで実行するタスクを定義した場合、あるサーバーでタスクが実行され、エラーで終了すると、Fabric はタスクを停止して中断します。しかし、Fabric がエラーを無視して、次のサーバーでタスクを実行するようにしたいのです。どうすればこのようなことができるのでしょうか?
例えば
$ fab site1_service_gw
[site1rpt1] Executing task 'site1_service_gw'
[site1fep1] run: echo 'Nm123!@#' | sudo -S route
[site1fep1] err:
[site1fep1] err: We trust you have received the usual lecture from the local System
[site1fep1] err: Administrator. It usually boils down to these three things:
[site1fep1] err:
[site1fep1] err: #1) Respect the privacy of others.
[site1fep1] err: #2) Think before you type.
[site1fep1] err: #3) With great power comes great responsibility.
[site1fep1] err: root's password:
[site1fep1] err: sudo: route: command not found
Fatal error: run() encountered an error (return code 1) while executing 'echo 'Nm123!@#' | sudo -S route '
Aborting.
どのように解決するのですか?
から ドキュメント :
... Fabric はデフォルトで "fail-fast" 動作パターンを採用しています: リモートプログラムがゼロ以外の戻り値を返したり、fabfile の Python コードが例外に遭遇するなど、何かがうまくいかない場合、実行は直ちに停止されます。
これは一般的に望ましい動作ですが、ルールには多くの例外があるため、Fabricはenv.warn_onlyというブール値の設定を提供しています。デフォルトはFalseで、エラー状態が発生した場合、プログラムは直ちに中止されます。しかし、失敗した時に env.warn_only が True に設定されていると、例えば settings コンテキストマネージャの場合、Fabric は警告メッセージを出しますが、実行は継続されます。
を使用することで、エラーが無視される場所を細かく制御できるようです。
settings
コンテキスト・マネージャ
のように、何かと便利です。
from fabric.api import settings
sudo('mkdir tmp') # can't fail
with settings(warn_only=True):
sudo('touch tmp/test') # can fail
sudo('rm tmp') # can't fail
関連
-
[解決済み] Pythonの__future__は何に使うのか、いつ、どのように使うのか、その仕組みについて
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複
-
[解決済み] ファブリックタスクにパラメータを渡す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonの文字列書式をリストで使う