終了コード
「何が起きたか」で処理を分岐できるように、終了コードを分けています。
| コード | 意味 | 対処 |
|---|---|---|
| 0 | 成功 | |
| 1 | 分類できないエラー | 標準エラーを読む |
| 2 | 未認証・認証切れ(401) | mtb auth login をやり直す |
| 3 | 権限不足(403) | リトライしても直らない。 MT のロールを見る |
| 4 | 対象が無い(404) | IDとベースURLを確認する |
| 5 | 呼び出し方の誤り | フラグ・JSON・key=value を直す。リクエストは送信されていない |
| 6 | 接続できない・時間切れ | リトライで成功する可能性がある |
| 7 | サーバ側のエラー(5xx) | MT のログを見る |
| 8 | 保存はできたが書き出せなかった | テンプレートの誤りを直して保存し直す |
5 は送信前のエラー
送信前に検出しているので、副作用は起きていません。誤りを直して、安心して再実行できます。
- フラグの綴り違い
- JSON の構文エラー(送る前に検査します)
--fileと--dirの併用のような、同時に指定できないフラグの組み合わせ- パスパラメータに数値でない値が入った
3 は人間が対処する
権限不足は待っても解消しません。リトライせず、MT の管理画面でロールを 見てください。
8 は --verify-publish / --wait のときだけ
保存はできています。 失敗したのは静的ファイルの書き出しです。
bash
mtb sites entries update 6 309 --entry '{"title":"…"}' --verify-publish
# => 保存はできましたが、静的ファイルの書き出しに失敗しています(MT のログに 1 件のエラー)。
# Error during publishing: ... Cannot find template 'main_index'原因がその記事と関係のないテンプレートにあることもあります。 詳しくは公開と再構築。
--wait でも 8 が返ることがあります。restIds が減らない応答が3回続くと、 mtb は待っても再構築が終わらないと判断して待機を打ち切ります。
シェルで分岐する例
bash
if ! mtb sites entries update 4 42 --entry @e.json --verify-publish; then
case $? in
2) mtb auth login ;; # 認証をやり直す
3) echo "権限が足りません" >&2; exit 1 ;; # 人に戻す
6) sleep 30 && retry ;; # 待って再実行
8) echo "保存はできたが公開に失敗" >&2 ;;
esac
fi