Bashの基本操作のランダムタイムアウト

Bashの基本操作のランダムタイムアウト

コンテキスト

LinuxシステムでGitHub Actionが実行されています。

次の操作を行います(ほとんど関係がないかもしれないので、まず質問にスキップしたいかもしれません。):

  1. pwd:/home/runner/work/net.twisterrob.cinema/net.twisterrob.cinema
  2. zipをダウンロードし、次の場所に解凍します。diff/prev
  3. zipをダウンロードし、次の場所に解凍します。diff/curr
  4. 他のすべてはdiffフォルダ内で実行されます。
  5. prev次のように内部ファイルペアに対してdiffを実行しますcurr
    diff --unified=3 --new-file --text --minimal "prev/backend.lockfile" "curr/backend.lockfile" > "backend.lockfile.diff"
    
  6. 異なるファイルに対して異なる diff セットを実行します。
    ./dependency-tree-diff.jar "prev/$1.dependencies" "curr/$1.dependencies" > "$1.dependencies.diff"
    
  7. シェルスクリプトを介してdiffをパッチに変換します。
    ./dependency-tree-diff-to-patch.sh "$1.dependencies.diff" "${BASE}" "${HEAD}" > "$1.dependencies.patch"
    
  8. 最後に、ディレクトリの内容は次のとおりです。ls -la
    total 272
    drwxr-xr-x  4 runner docker  4096 Jan 27 21:13 .
    drwxr-xr-x 12 runner docker  4096 Jan 27 21:12 ..
    -rw-r--r--  1 runner docker 32293 Jan 27 21:13 backend-database.dependencies.diff
    -rw-r--r--  1 runner docker 32784 Jan 27 21:13 backend-database.dependencies.patch
    -rw-r--r--  1 runner docker  4250 Jan 27 21:13 backend-database.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 backend-database.lockfile.diff.error
    -rw-r--r--  1 runner docker 14853 Jan 27 21:13 backend-endpoint.dependencies.diff
    -rw-r--r--  1 runner docker 15322 Jan 27 21:13 backend-endpoint.dependencies.patch
    -rw-r--r--  1 runner docker  4202 Jan 27 21:13 backend-endpoint.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 backend-endpoint.lockfile.diff.error
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend-feed.dependencies.diff
    -rw-r--r--  1 runner docker   426 Jan 27 21:13 backend-feed.dependencies.patch
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend-feed.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 backend-feed.lockfile.diff.error
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend-network.dependencies.diff
    -rw-r--r--  1 runner docker   438 Jan 27 21:13 backend-network.dependencies.patch
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend-network.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 backend-network.lockfile.diff.error
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend-quickbook.dependencies.diff
    -rw-r--r--  1 runner docker   446 Jan 27 21:13 backend-quickbook.dependencies.patch
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend-quickbook.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 backend-quickbook.lockfile.diff.error
    -rw-r--r--  1 runner docker 13691 Jan 27 21:13 backend-sync.dependencies.diff
    -rw-r--r--  1 runner docker 14141 Jan 27 21:13 backend-sync.dependencies.patch
    -rw-r--r--  1 runner docker  3869 Jan 27 21:13 backend-sync.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 backend-sync.lockfile.diff.error
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend.dependencies.diff
    -rw-r--r--  1 runner docker   406 Jan 27 21:13 backend.dependencies.patch
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 backend.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 backend.lockfile.diff.error
    drwxr-xr-x  2 runner docker  4096 Jan 27 21:12 curr
    -rwxr-xr-x  1 runner docker   441 Jan 27 21:13 dependency-tree-diff-to-patch.sh
    -rwxr-xr-x  1 runner docker 20979 Jun 17  2022 dependency-tree-diff.jar
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 plugins-settings.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 plugins-settings.lockfile.diff.error
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 plugins.dependencies.diff
    -rw-r--r--  1 runner docker   406 Jan 27 21:13 plugins.dependencies.patch
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 plugins.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 plugins.lockfile.diff.error
    drwxr-xr-x  2 runner docker  4096 Jan 27 21:12 prev
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 root-settings.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 root-settings.lockfile.diff.error
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 root.dependencies.diff
    -rw-r--r--  1 runner docker   394 Jan 27 21:13 root.dependencies.patch
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 root.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 root.lockfile.diff.error
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 test-helpers.dependencies.diff
    -rw-r--r--  1 runner docker   426 Jan 27 21:13 test-helpers.dependencies.patch
    -rw-r--r--  1 runner docker     0 Jan 27 21:13 test-helpers.lockfile.diff
    -rw-r--r--  1 runner docker     2 Jan 27 21:13 test-helpers.lockfile.diff.error
    
  9. フォルダサイズをよりよく測定するには、次の手順を実行します。du -h -d 1
    2.3M    ./prev
    2.3M    ./curr
    4.8M    .
    
  10. ディスク使用量:df
    Filesystem     1K-blocks     Used Available Use% Mounted on
    /dev/root       87204404 51329544  35858476  59% /
    tmpfs            3555312      172   3555140   1% /dev/shm
    tmpfs            1422128     1092   1421036   1% /run
    tmpfs               5120        0      5120   0% /run/lock
    /dev/sdb15        106858     5329    101529   5% /boot/efi
    /dev/sda1       14341128  4194336   9396508  31% /mnt
    tmpfs             711060       12    711048   1% /run/user/1001
    
  11. diffファイルを1つのファイルにマージ
    ls --format=single-column --time=ctime --reverse *.dependencies.diff | xargs tail --lines=+1 > all.dependencies.diff
    

ステップ11の目的は、cat *.dependencies.diff > all.dependencies.diffより多くの制御(順序)と毛羽(タイトル)を持つことです。https://stackoverflow.com/a/2817024+https://stackoverflow.com/a/7816490man ls+フラグを使用して拡張しますman tail

問題と質問

最後のステップ11でタイムアウトすることがあります。全体のGitHub Actionのタイムアウトは10分で、ステップ11は通常9分かかり、キャンセルされます。しかし、いつもそうではない、一般的に「動作」します。 All lsduおよびdfは何が起こっているのかを診断するためのものです。誰かがこの設定/スクリプト/環境で完了しない可能性がある問題を見つけたいと思うようにこの記事を投稿してください。私のスクリプトからエラーを除外しようとしています。

はい

まったく同じコード(変更なし)のさまざまなシナリオをすべて示す優れた例があります。

試み1:失敗https://github.com/TWiStErRob/net.twisterrob.cinema/actions/runs/4028195985/jobs/6924812632

試み2:失敗https://github.com/TWiStErRob/net.twisterrob.cinema/actions/runs/4028195985/jobs/6925862191

試み3:成功 https://github.com/TWiStErRob/net.twisterrob.cinema/actions/runs/4028195985/jobs/6930610577

最も奇妙なことは、失敗したときに常に「デバイスに残りのスペースがありません」というメッセージが表示され、常にこの段階にあることです!

System.IO.IOException: No space left on device : '/home/runner/runners/2.301.1/_diag/Worker_20230127-210915-utc.log'
   at System.IO.RandomAccess.WriteAtOffset(SafeFileHandle handle, ReadOnlySpan`1 buffer, Int64 fileOffset)
   at System.IO.Strategies.BufferedFileStreamStrategy.FlushWrite()
   at System.IO.Strategies.BufferedFileStreamStrategy.WriteSpan(ReadOnlySpan`1 source, ArraySegment`1 arraySegment)
   at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
   at System.Diagnostics.TextWriterTraceListener.Flush()
   at GitHub.Runner.Common.HostTraceListener.WriteHeader(String source, TraceEventType eventType, Int32 id)
   at GitHub.Runner.Common.HostTraceListener.TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, Int32 id, String message)
   at System.Diagnostics.TraceSource.TraceEvent(TraceEventType eventType, Int32 id, String message)
   at GitHub.Runner.Worker.Worker.RunAsync(String pipeIn, String pipeOut)
   at GitHub.Runner.Worker.Program.MainAsync(IHostContext context, String[] args)
System.IO.IOException: No space left on device : '/home/runner/runners/2.301.1/_diag/Worker_20230127-210915-utc.log'
   at System.IO.RandomAccess.WriteAtOffset(SafeFileHandle handle, ReadOnlySpan`1 buffer, Int64 fileOffset)
   at System.IO.Strategies.BufferedFileStreamStrategy.FlushWrite()
   at System.IO.Strategies.BufferedFileStreamStrategy.WriteSpan(ReadOnlySpan`1 source, ArraySegment`1 arraySegment)
   at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
   at System.Diagnostics.TextWriterTraceListener.Flush()
   at GitHub.Runner.Common.HostTraceListener.WriteHeader(String source, TraceEventType eventType, Int32 id)
   at GitHub.Runner.Common.HostTraceListener.TraceEvent(TraceEventCache eventCache, String source, TraceEventType eventType, Int32 id, String message)
   at System.Diagnostics.TraceSource.TraceEvent(TraceEventType eventType, Int32 id, String message)
   at GitHub.Runner.Common.Tracing.Error(Exception exception)
   at GitHub.Runner.Worker.Program.MainAsync(IHostContext context, String[] args)
Unhandled exception. System.IO.IOException: No space left on device : '/home/runner/runners/2.301.1/_diag/Worker_20230127-210915-utc.log'
   at System.IO.RandomAccess.WriteAtOffset(SafeFileHandle handle, ReadOnlySpan`1 buffer, Int64 fileOffset)
   at System.IO.Strategies.BufferedFileStreamStrategy.FlushWrite()
   at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
   at System.Diagnostics.TextWriterTraceListener.Flush()
   at System.Diagnostics.TraceSource.Flush()
   at GitHub.Runner.Common.TraceManager.Dispose(Boolean disposing)
   at GitHub.Runner.Common.TraceManager.Dispose()
   at GitHub.Runner.Common.HostContext.Dispose(Boolean disposing)
   at GitHub.Runner.Common.HostContext.Dispose()
   at GitHub.Runner.Worker.Program.Main(String[] args)

関連情報