Blog

Claude Code: had 30 minit untuk arahan latar belakang

Markdown

Claude Code menghentikan arahan latar belakang selepas 30 minit dalam larian tanpa pengawasan: -p, Agent SDK, CI, cloud. Cara menaikkan had dan tindakan selepas arahan terhenti.

Baca artikel penuh

Claude Code menghentikan arahan latar belakang selepas 30 minit apabila arahan itu berjalan tanpa pengawasan: pelancaran dengan bendera -p, aplikasi Agent SDK, tugas CI atau sesi cloud. Jika Claude menetapkan tempoh untuk arahan itu sendiri, arahan tersebut akan berjalan selama tidak lebih daripada 2 jam, manakala terminal biasa, aplikasi desktop dan VS Code tidak mempunyai had sejak versi 2.1.288.

Dulu saya duduk di hadapan skrin sepanjang hari: berikan ejen satu langkah, periksa, buat pembetulan, minta ejen meneruskan kerja. Fasa demi fasa. Mesin mungkin menulis kod, tetapi sayalah yang mengendalikannya. Kini saya menulis pelan, membahagikannya kepada beberapa fasa, menyerahkan pelaksanaannya kepada subagen semalaman dan beredar. Dalam 8 jam tanpa saya, Claude mengikuti pelan itu: mengkaji, membina dan memperhalus. Pada waktu pagi, saya lebih banyak meluangkan masa menerima hasil kerja daripada mengulanginya.

Namun, jika larian semalaman menggunakan -p, berjalan mengikut jadual pada pelayan, dalam CI atau di cloud, pelayan pembangunan dan binaan yang berjalan di latar belakang hanya akan bertahan selama 30 minit. Kemudian Claude Code akan menghentikannya, dan kerja semalaman akan terbantut separuh jalan. Saya akan terangkan siapa yang terjejas oleh had ini, cara menaikkannya dan tindakan yang perlu diambil jika arahan sudah terhenti. Mari kita mulakan.

Untuk bantuan menggunakan perkhidmatan ini, lihat dokumentasi Ailoot.

Inti pati utama

Sejak versi 2.1.285, Claude Code menghentikan sendiri arahan latar belakang apabila arahan itu mencapai had masa dan memberitahu Claude sebabnya. Sejak versi 2.1.288, had ini hanya terpakai pada larian tanpa pengawasan: -p, Agent SDK, CI dan sesi cloud. Arahan yang dimulakan terus di latar belakang berjalan selama 30 minit atau mengikut tempoh yang ditetapkan, tetapi tidak melebihi 2 jam. Arahan yang dipindahkan ke latar belakang selepas tamat masa akan berjalan selama 30 minit bermula dari saat itu. Anda boleh menaikkan had ini dengan 2 pemboleh ubah dalam fail tetapan ~/.claude/settings.json.

Siapa yang terjejas oleh had ini

Arahan latar belakang ialah sesuatu yang dimulakan oleh Claude dan dibiarkan berjalan sementara Claude melakukan perkara lain. Contohnya, pelayan pembangunan yang dimulakan dengan npm run dev atau binaan yang memantau perubahan pada fail.

Dokumentasi Claude Code menyatakan:

Dalam sesi yang berjalan tanpa pengawasan, seperti larian dengan bendera -p, aplikasi Agent SDK, tugas CI atau sesi cloud, arahan Bash dan PowerShell latar belakang mempunyai had masa. Sesi setempat yang anda gunakan melalui terminal, aplikasi desktop atau sambungan VS Code tidak mempunyai had masa untuk arahan latar belakang.

Had masa memerlukan Claude Code v2.1.285 atau yang lebih baharu. Sebelum v2.1.288, had ini terpakai dalam setiap sesi.

— Anthropic, Rujukan alat, https://code.claude.com/docs/en/tools-reference.md

Dengan kata lain, had ini terpakai apabila anda tiada: larian dengan -p, aplikasi Agent SDK, tugas CI atau sesi cloud. Tiada had dalam terminal, aplikasi desktop atau VS Code apabila anda sendiri bekerja dalam sesi tersebut. Had ini diperkenalkan dalam versi 2.1.285 dan terpakai di semua tempat sebelum versi 2.1.288.

Cara mengetahui sama ada perkara ini terpakai kepada anda:

  • Anda membuka Claude Code dalam terminal atau VS Code, memberikannya tugas dan pergi tidur. Tiada had jika versinya 2.1.288 atau lebih baharu. Dalam versi 2.1.285 hingga 2.1.287, had ini turut terpakai. Saya menerangkan cara mengemas kini kepada versi terkini dalam artikel berasingan.
  • Claude Code dilancarkan dengan claude -p "task" mengikut jadual, daripada aplikasi Agent SDK anda sendiri atau dalam CI. Had ini terpakai.
  • Tugas berjalan dalam sesi cloud. Had ini terpakai.

Apabila saya menetapkan ejen untuk bekerja secara kendiri, saya memasukkan dalam prompt: “Tulis syarat ini dan sebab untuk berhenti dalam pelan kerja. Pastikan proses ini tidak bergantung pada tetingkap yang akan saya tutup atau pada komputer itu sendiri.” Had 30 minit ialah salah satu sebab tersebut.

Berapa lama arahan latar belakang berjalan

Kiraan detik bermula apabila arahan beralih ke latar belakang. Ada 2 keadaan.

Claude terus memulakan arahan di latar belakang. Tempohnya 30 minit. Jika Claude menetapkan tempoh semasa memulakannya (parameter timeout), arahan itu mendapat tempoh tersebut, tetapi tidak melebihi 2 jam.

Arahan tidak selesai semasa Claude menunggunya. Claude menunggu selama 2 minit untuk arahan biasa. Jika arahan itu belum selesai, Claude Code tidak menghentikannya; Claude Code memindahkannya ke latar belakang. Mulai saat itu, tempohnya 30 minit.

Apabila tempoh tamat, Claude Code menghentikan arahan tersebut dan memberitahu Claude:

Background command "<description>" was stopped after reaching its background time limit

Jika kerja belum selesai, Claude boleh menjalankan semula arahan itu dengan tempoh yang lebih panjang.

Satu lagi perkara tentang -p. Dengan jenis larian ini, arahan latar belakang ditamatkan kira-kira 5 saat selepas respons akhir Claude. Pelayan yang dimulakan dalam larian semalaman dengan -p hanya bertahan selama larian itu sendiri. Had 30 minit penting apabila larian berlangsung lebih lama: Claude memulakan pelayan pada awal larian, kemudian menghabiskan masa sejam untuk menjalankan pemeriksaan terhadapnya.

Cara mengatur kerja semalaman dalam Claude Code

Saya bosan mengendalikan ejen sepanjang hari, jadi saya menggantikannya dengan satu prompt pengorkestra. Saya memulakannya pada waktu petang, dan Claude bekerja sepanjang malam mengikut turutan fasa: menulis, menyemak, membetulkan dan membuat commit sendiri.

Kumpulan subagen menulis kod, setiap satunya dengan fail tersendiri supaya mereka tidak mengganggu kerja satu sama lain. Kumpulan lain yang baharu pula menerima hasil kerja itu: menjalankan semakan kod, pemeriksaan keselamatan dan pemeriksaan langsung. Jika mereka menemui masalah, masalah itu dibetulkan serta-merta dan pemeriksaan dijalankan semula. Prompt tersebut mengandungi ayat: “Jika konteks anda habis, catat keadaan semasa; larian seterusnya akan menyambung kerja.”

Dalam contoh yang diterangkan, 8 daripada 14 fasa diselesaikan dengan cara ini dalam tempoh 3 hari.

Hanya ada 2 perkara yang perlu diingat. Pengorkestra tidak berfikir bagi pihak anda: mula-mula, tulis pelan terperinci dengan beberapa fasa, kemudian mulakan giliran kerja semalaman. Selain itu, pengorkestra menggunakan sebahagian besar kuota langganan anda, jadi tidak berbaloi menyediakannya untuk tugas kecil. Sentiasa hadkan bilangan percubaan, atau ejen akan menghabiskan seluruh kuota langganan anda dalam satu malam. Saya menerangkan cara menetapkan had penggunaan ini dalam artikel berasingan.

Cara menaikkan had

Pilihan 1: minta Claude. Claude memilih tempoh untuk sesuatu arahan; anda tidak menetapkannya sendiri. Namun, anda boleh menulis dalam tugas: “Pastikan pelayan pembangunan berjalan di latar belakang selama 2 jam.” Anda tidak boleh mendapat lebih daripada 2 jam dengan cara ini.

Pilihan 2: pemboleh ubah dalam fail tetapan. Nilai dinyatakan dalam milisaat. Anda tidak boleh menurunkan had di bawah 30 minit dan 2 jam; anda hanya boleh menaikkannya.

  • BASH_DEFAULT_TIMEOUT_MS yang ditetapkan melebihi 1800000 (30 minit) mengubah nilai lalai 30 minit. Ia terpakai pada arahan yang dimulakan oleh Claude di latar belakang tanpa menetapkan tempoh, serta arahan yang dipindahkan ke latar belakang selepas tamat masa. Jika anda menetapkannya melebihi 7200000 (2 jam), had maksimum turut meningkat.
  • BASH_MAX_TIMEOUT_MS yang ditetapkan melebihi 7200000 menaikkan had maksimum 2 jam. Ia tidak mengubah nilai lalai 30 minit: arahan tanpa tempoh yang ditetapkan sendiri masih akan berhenti selepas 30 minit.

BASH_DEFAULT_TIMEOUT_MS mempunyai kesan sampingan. Pemboleh ubah yang sama menetapkan tempoh Claude menunggu arahan biasa sebelum memindahkannya ke latar belakang. Tetapkannya kepada 1 jam, dan Claude akan menunggu selama 1 jam dan bukannya 2 minit. Hal ini tidak mengganggu kerja semalaman. Pada waktu siang, anda perlu menunggu lebih lama untuk mendapatkan respons apabila arahan mengambil masa yang lama.

Jika anda tidak mahu meneliti butirannya: jika anda memerlukan 3 jam untuk arahan biasa dan juga had maksimum, tetapkan BASH_DEFAULT_TIMEOUT_MS kepada 10800000. Itu sudah memadai; anda tidak memerlukan pemboleh ubah kedua.

Fail tetapan terletak dalam folder .claude di direktori utama anda: ~/.claude/settings.json pada macOS dan Linux, dan %USERPROFILE%\.claude\settings.json pada Windows. Jika fail itu belum wujud, cipta fail tersebut. Had 1 jam kelihatan seperti ini:

{
  "env": {
    "BASH_DEFAULT_TIMEOUT_MS": "3600000"
  }
}

Jika fail itu sudah mempunyai blok env, tambahkan baris tersebut ke dalamnya. Sesi yang sedang berjalan akan menggunakan nilai baharu apabila anda menyimpan fail. Pemboleh ubah yang dibuang hanya berkuat kuasa apabila anda memulakan claude pada kali seterusnya.

Fail itu mesti berada pada mesin tempat ejen dijalankan. Untuk membolehkan ejen bekerja semalaman, komputer tidak boleh memasuki mod tidur. Sebagai alternatif, jalankan Claude Code pada pelayan jauh dan letakkan tetapan tersebut di sana.

Jika arahan sudah terhenti

Anda tidak perlu melakukan apa-apa secara manual. Claude Code memberitahu Claude sebab arahan terhenti, jadi mula-mula tanya sahaja apa yang berlaku.

Kemudian, ikuti langkah demi langkah:

  1. Satu larian panjang sekali sahaja, sehingga 2 jam. Minta Claude menjalankan semula arahan itu dengan tempoh yang lebih panjang.
  2. Arahan kerap memerlukan lebih daripada 30 minit. Tetapkan BASH_DEFAULT_TIMEOUT_MS melebihi 1800000 dalam fail tetapan seperti contoh di atas. Jika anda memerlukan lebih daripada 2 jam, tetapkan juga BASH_MAX_TIMEOUT_MS melebihi 7200000 di situ.
  3. Jalankan arahan itu sekali lagi. Dokumentasi tidak memberikan sebarang jaminan tentang arahan yang sudah berjalan di latar belakang sebelum perubahan dibuat.
  4. Periksa hasil larian seterusnya. Jika laporan Claude sekali lagi mengandungi frasa “dihentikan selepas mencapai had masa latar belakang,” tetapan itu tidak terpakai pada arahan tersebut.

Subagen dan rutinlah yang memastikan ejen terus bekerja semasa anda tiada.

Saya menerangkan cara menjalankan ejen dalam gelung sepanjang malam dalam artikel berasingan. Cara mengkonfigurasi Claude Code supaya tidak merosakkan projek semalaman pula diterangkan di sini.

Semak langkah yang menyebabkan larian semalaman anda terhenti, kemudian bandingkan sebabnya dengan had di atas.

Sumber

  • Claude Code: Rujukan alat - tempat had ini terpakai, versi 2.1.285 dan 2.1.288, tempoh 30 minit dan 2 jam, pemindahan arahan ke latar belakang selepas tamat masa, teks pemberitahuan serta pemboleh ubah BASH_DEFAULT_TIMEOUT_MS dan BASH_MAX_TIMEOUT_MS.
  • Claude Code: Pemboleh ubah persekitaran - nilai lalai 2 minit untuk arahan biasa, blok env dalam ~/.claude/settings.json dan masa sesi menggunakan nilai baharu.
  • Claude Code: Headless - larian dengan -p; arahan latar belakang ditamatkan kira-kira 5 saat selepas respons akhir.
  • Claude Code: Tetapan - lokasi ~/.claude/settings.json pada Windows.

Kenali Ailoot.

Butiran lanjut

Soalan lazim: Claude Code: had 30 minit untuk arahan latar belakang

Adakah meninggalkan sesi interaktif semalaman mencetuskan had 30 minit?

Dalam Claude Code 2.1.288 atau lebih baharu, had artikel terpakai pada pelaksanaan tanpa pengawasan seperti -p, Agent SDK, CI dan sesi awan. Sekadar membiarkan sesi interaktif setempat biasa terbuka tidak memasukkannya dalam kategori itu.

Adakah timeout lebih besar mengekalkan pelayan selepas pelaksanaan -p selesai?

Tidak. Arahan latar belakang dalam pelaksanaan -p tamat sejurus selepas respons akhir. Perubahan timeout mempengaruhi tempoh arahan ketika pelaksanaan; ia tidak menukarnya menjadi pengehosan berterusan.

Semua artikel