事象
rsync が一時的に失敗し、同じコミットのまま re-run すると成功することがある。
rsync: mkdir "/home/users/1/small-elephant/web/noie.tokyo" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(657) [Receiver=3.1.2]
[DEPLOY] - sync -> [ERROR]
##[error]Process completed with exit code 1.
エラーは「転送先ディレクトリが存在しない」と言っているが、実際には存在する(直前の before_sync で同じパスの wp/wp-includes/version.php を SSH 経由で cat できている)。再実行すれば同じ設定・同じコミットで通るため、サーバ側の一時的な応答不良と考えられる。
発生状況
2026-07-28 の wp2shell 対応中、1日で3回発生した。
| 日時 |
サイト |
ブランチ |
サーバ |
| 2026-06-29 |
danc.kyushu-u.ac.jp |
main |
Heteml |
| 2026-07-28 |
compass.chiba-sakamotokaikei.com |
staging |
Heteml |
| 2026-07-28 |
noie.tokyo |
main |
Heteml |
| 2026-07-28 |
danc.kyushu-u.ac.jp |
staging |
Heteml |
いずれも re-run で成功。
短時間に多数のデプロイを走らせたことが影響している可能性がある(SSH の同時接続数やレート制限)。通常運用では滅多に起きないが、今回のように複数サイトを立て続けにデプロイすると顕在化する。
なぜ対処したいか
対策案
案1: rsync のリトライ
deploy.sh の rsync 実行部分を数回リトライする。
for i in 1 2 3; do
rsync ... && break
log "- sync -> retry ($i/3)"
sleep 10
done
注意: リトライしてよいのは転送そのものの失敗に限る。before_sync の中断(exit 1)はリトライしてはいけないので、do_sync の rsync 部分だけを対象にすること。
案2: 失敗の種類を見分けてメッセージを変える
rsync の終了コード(code 11 = file IO error, code 12 = protocol error 等)を見て、「一時障害の可能性が高いので re-run を試してください」と案内する。リトライはせず、判断材料だけ与える。
案3: 何もしない(現状維持)
通常運用では滅多に起きないため、記録だけ残して re-run で対処する。
補足
--delete 付きで動作しているため、中途半端に転送が終わった状態で失敗するとサーバ側が壊れる可能性がある点は留意が必要。今回のケースはいずれも mkdir の段階で失敗しており、ファイルの削除・転送は始まっていなかったため実害はなかった。
リトライを入れる場合も、この観点で「どの段階の失敗なら安全に再試行できるか」を整理しておきたい。
事象
rsync が一時的に失敗し、同じコミットのまま re-run すると成功することがある。
エラーは「転送先ディレクトリが存在しない」と言っているが、実際には存在する(直前の
before_syncで同じパスのwp/wp-includes/version.phpを SSH 経由でcatできている)。再実行すれば同じ設定・同じコミットで通るため、サーバ側の一時的な応答不良と考えられる。発生状況
2026-07-28 の wp2shell 対応中、1日で3回発生した。
いずれも re-run で成功。
短時間に多数のデプロイを走らせたことが影響している可能性がある(SSH の同時接続数やレート制限)。通常運用では滅多に起きないが、今回のように複数サイトを立て続けにデプロイすると顕在化する。
なぜ対処したいか
対策案
案1: rsync のリトライ
deploy.shの rsync 実行部分を数回リトライする。注意: リトライしてよいのは転送そのものの失敗に限る。
before_syncの中断(exit 1)はリトライしてはいけないので、do_syncの rsync 部分だけを対象にすること。案2: 失敗の種類を見分けてメッセージを変える
rsync の終了コード(
code 11= file IO error,code 12= protocol error 等)を見て、「一時障害の可能性が高いので re-run を試してください」と案内する。リトライはせず、判断材料だけ与える。案3: 何もしない(現状維持)
通常運用では滅多に起きないため、記録だけ残して re-run で対処する。
補足
--delete付きで動作しているため、中途半端に転送が終わった状態で失敗するとサーバ側が壊れる可能性がある点は留意が必要。今回のケースはいずれもmkdirの段階で失敗しており、ファイルの削除・転送は始まっていなかったため実害はなかった。リトライを入れる場合も、この観点で「どの段階の失敗なら安全に再試行できるか」を整理しておきたい。