บล็อก

Claude Code: ขีดจำกัดคำสั่งเบื้องหลัง 30 นาที

Markdown

Claude Code หยุดคำสั่งเบื้องหลังหลังผ่านไป 30 นาทีเมื่อทำงานโดยไม่มีผู้ดูแล: -p, Agent SDK, CI และคลาวด์ วิธีเพิ่มขีดจำกัดและสิ่งที่ควรทำหลังคำสั่งหยุดทำงาน

อ่านบทความฉบับเต็ม

Claude Code จะหยุดคำสั่งเบื้องหลังหลังผ่านไป 30 นาทีเมื่อคำสั่งทำงานโดยไม่มีผู้ดูแล ได้แก่ การเรียกใช้ด้วยแฟล็ก -p แอปพลิเคชัน Agent SDK งาน CI หรือเซสชันบนคลาวด์ หาก Claude กำหนดเวลาให้คำสั่งนั้นเอง คำสั่งจะทำงานได้ไม่เกิน 2 ชั่วโมง ส่วนเทอร์มินัลทั่วไป แอปเดสก์ท็อป และ VS Code ไม่มีขีดจำกัดนี้มาตั้งแต่เวอร์ชัน 2.1.288

เมื่อก่อนฉันนั่งอยู่หน้าจอตลอดทั้งวัน คอยมอบหมายขั้นตอนให้เอเจนต์ ตรวจดู แก้ไข แล้วขอให้ทำต่อไป ทีละขั้นตอน เครื่องอาจเป็นฝ่ายเขียนโค้ด แต่ฉันคือคนที่คอยขับเคลื่อนมัน ตอนนี้ฉันเขียนแผน แบ่งออกเป็นระยะ ๆ มอบงานพัฒนาให้ซับเอเจนต์ทำข้ามคืน แล้วก็ออกไป ตลอด 8 ชั่วโมงที่ไม่มีฉัน Claude จะทำงานตามแผนไปเรื่อย ๆ ทั้งศึกษา สร้าง และปรับปรุง พอตอนเช้า ฉันใช้เวลาตรวจรับงานมากกว่าทำงานนั้นใหม่

แต่ถ้าการทำงานข้ามคืนใช้ -p ทำงานตามกำหนดเวลาบนเซิร์ฟเวอร์ ใน CI หรือบนคลาวด์ เซิร์ฟเวอร์พัฒนาและบิลด์ที่ทำงานอยู่เบื้องหลังจะอยู่ได้ 30 นาที จากนั้น Claude Code จะหยุดทั้งสองอย่าง และงานข้ามคืนก็จะสะดุดกลางคัน ฉันจะอธิบายว่าขีดจำกัดนี้มีผลกับใคร วิธีเพิ่มขีดจำกัด และควรทำอย่างไรหากคำสั่งหยุดไปแล้ว มาเริ่มกันเลย

หากต้องการความช่วยเหลือในการใช้บริการ โปรดดูเอกสารประกอบของ Ailoot

ประเด็นสำคัญ

ตั้งแต่เวอร์ชัน 2.1.285 เป็นต้นมา Claude Code จะหยุดคำสั่งเบื้องหลังเองเมื่อคำสั่งถึงขีดจำกัดเวลา และแจ้ง Claude ถึงสาเหตุ ตั้งแต่เวอร์ชัน 2.1.288 ขีดจำกัดนี้มีผลเฉพาะกับการทำงานโดยไม่มีผู้ดูแล ได้แก่ -p, Agent SDK, CI และเซสชันบนคลาวด์ คำสั่งที่เริ่มทำงานเบื้องหลังโดยตรงจะทำงานเป็นเวลา 30 นาที หรือตามเวลาที่ระบุ แต่ไม่เกิน 2 ชั่วโมง ส่วนคำสั่งที่ย้ายไปทำงานเบื้องหลังหลังหมดเวลารอ จะทำงานต่อได้ 30 นาทีตั้งแต่ตอนนั้น คุณเพิ่มขีดจำกัดได้ด้วยตัวแปร 2 ตัวในไฟล์การตั้งค่า ~/.claude/settings.json

ขีดจำกัดนี้มีผลกับใครบ้าง

คำสั่งเบื้องหลังคือสิ่งที่ Claude เริ่มทำงานทิ้งไว้ ขณะที่กำลังทำอย่างอื่นอยู่ ตัวอย่างเช่น เซิร์ฟเวอร์พัฒนาที่เริ่มด้วย npm run dev หรือบิลด์ที่คอยตรวจดูการเปลี่ยนแปลงของไฟล์

เอกสาร Claude Code ระบุว่า:

ในการทำงานที่ไม่มีผู้ดูแล เช่น การเรียกใช้ด้วยแฟล็ก -p แอปพลิเคชัน Agent SDK งาน CI หรือเซสชันบนคลาวด์ คำสั่ง Bash และ PowerShell ที่ทำงานเบื้องหลังจะมีขีดจำกัดเวลา ส่วนเซสชันภายในเครื่องที่คุณทำงานผ่านเทอร์มินัล แอปเดสก์ท็อป หรือส่วนขยาย VS Code จะไม่มีขีดจำกัดเวลาสำหรับคำสั่งเบื้องหลัง

ขีดจำกัดเวลานี้ต้องใช้ Claude Code เวอร์ชัน 2.1.285 ขึ้นไป ก่อนเวอร์ชัน 2.1.288 ขีดจำกัดนี้มีผลกับทุกเซสชัน

— Anthropic, เอกสารอ้างอิงเครื่องมือ, https://code.claude.com/docs/en/tools-reference.md

พูดอีกอย่างคือ ขีดจำกัดนี้มีผลเมื่อคุณไม่อยู่ตรงนั้น ได้แก่ การทำงานด้วย -p แอปพลิเคชัน Agent SDK งาน CI หรือเซสชันบนคลาวด์ หากคุณทำงานในเซสชันด้วยตัวเองผ่านเทอร์มินัล แอปเดสก์ท็อป หรือ VS Code จะไม่มีขีดจำกัดนี้ ขีดจำกัดดังกล่าวเริ่มใช้ในเวอร์ชัน 2.1.285 และมีผลทุกที่ก่อนเวอร์ชัน 2.1.288

วิธีตรวจสอบว่าขีดจำกัดนี้มีผลกับคุณหรือไม่:

  • คุณเปิด Claude Code ในเทอร์มินัลหรือ VS Code มอบหมายงานให้ แล้วเข้านอน หากใช้เวอร์ชัน 2.1.288 ขึ้นไป จะไม่มีขีดจำกัดนี้ ในเวอร์ชัน 2.1.285 ถึง 2.1.287 ขีดจำกัดนี้มีผลกับกรณีนี้ด้วย ฉันอธิบายวิธีอัปเดตเป็นเวอร์ชันล่าสุดไว้ในบทความแยก
  • Claude Code เปิดทำงานด้วย claude -p "task" ตามกำหนดเวลา จากแอปพลิเคชัน Agent SDK ของคุณเอง หรือใน CI ขีดจำกัดนี้มีผล
  • งานทำงานอยู่ในเซสชันบนคลาวด์ ขีดจำกัดนี้มีผล

เมื่อฉันมอบหมายงานให้เอเจนต์ทำงานอย่างอิสระ ฉันจะขอไว้ในพรอมป์ตว่า: “เขียนเงื่อนไขเหล่านี้และเหตุผลที่ต้องหยุดลงในแผนการทำงาน ตรวจสอบว่ากระบวนการไม่ได้ขึ้นอยู่กับหน้าต่างที่ฉันจะปิดหรือกับตัวคอมพิวเตอร์เอง” ขีดจำกัด 30 นาทีก็เป็นเหตุผลหนึ่งที่ต้องระบุไว้

คำสั่งเบื้องหลังทำงานได้นานแค่ไหน

การนับเวลาถอยหลังเริ่มเมื่อคำสั่งเข้าสู่โหมดเบื้องหลัง มี 2 กรณี

Claude เริ่มคำสั่งในโหมดเบื้องหลังทันที คำสั่งจะทำงานได้ 30 นาที หาก Claude ระบุเวลาไว้ตอนเริ่มคำสั่ง (พารามิเตอร์ timeout) คำสั่งจะทำงานได้ตามเวลานั้น แต่ไม่เกิน 2 ชั่วโมง

คำสั่งยังไม่เสร็จขณะที่ Claude กำลังรอ Claude จะรอคำสั่งทั่วไปเป็นเวลา 2 นาที หากคำสั่งยังไม่เสร็จ Claude Code จะไม่หยุดคำสั่ง แต่จะย้ายไปทำงานเบื้องหลัง จากจุดนั้นจะทำงานต่อได้ 30 นาที

เมื่อหมดเวลา Claude Code จะหยุดคำสั่งและแจ้ง Claude ว่า:

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

หากงานยังไม่เสร็จ Claude สามารถเรียกใช้คำสั่งอีกครั้งโดยกำหนดเวลาให้นานขึ้น

และอีกประเด็นเกี่ยวกับ -p เมื่อทำงานแบบนี้ คำสั่งเบื้องหลังจะยุติลงประมาณ 5 วินาทีหลังจาก Claude ตอบคำตอบสุดท้าย เซิร์ฟเวอร์ที่เริ่มทำงานในการเรียกใช้ -p ข้ามคืนจะทำงานได้นานเท่าที่การเรียกใช้นั้นยังดำเนินอยู่ ขีดจำกัด 30 นาทีจะสำคัญเมื่อการทำงานใช้เวลานานกว่านั้น เช่น Claude เริ่มเซิร์ฟเวอร์ตอนต้น แล้วใช้เวลาหนึ่งชั่วโมงตรวจสอบการทำงานกับเซิร์ฟเวอร์นั้น

วิธีจัดงานข้ามคืนใน Claude Code

ฉันเบื่อที่ต้องคอยขับเคลื่อนเอเจนต์ตลอดทั้งวัน จึงเปลี่ยนมาใช้พรอมป์ตสำหรับตัวประสานงานเพียงชุดเดียว ฉันเริ่มงานตอนเย็น แล้ว Claude ก็ทำงานตลอดทั้งคืนตามลำดับขั้นตอน ได้แก่ เขียน ตรวจสอบ แก้ไข และ commit ด้วยตัวเอง

กลุ่มซับเอเจนต์เขียนโค้ด โดยแต่ละกลุ่มมีไฟล์ของตัวเองเพื่อไม่ให้ทำงานขัดกัน จากนั้นกลุ่มใหม่อีกกลุ่มจะเข้ามาตรวจรับงาน ทั้งตรวจสอบโค้ด ตรวจสอบความปลอดภัย และตรวจสอบการทำงานจริง หากพบปัญหา ก็จะแก้ไขทันทีและเรียกใช้การตรวจสอบอีกครั้ง พรอมป์ตมีบรรทัดว่า: “หากบริบทของคุณหมด ให้บันทึกสถานะไว้ การทำงานครั้งถัดไปจะดำเนินต่อจากจุดนั้น”

ในตัวอย่างที่อธิบายไว้ ตลอด 3 วันสามารถทำขั้นตอนสำเร็จได้ 8 จาก 14 ขั้นตอนด้วยวิธีนี้

มีเพียง 2 เรื่องที่ต้องคำนึงถึง ตัวประสานงานไม่สามารถคิดแทนคุณได้: ก่อนอื่นให้เขียนแผนโดยละเอียดพร้อมแบ่งขั้นตอน แล้วค่อยเริ่มกะทำงานข้ามคืน อีกเรื่องคือวิธีนี้ใช้โควตาการสมัครสมาชิกของคุณมาก จึงไม่คุ้มที่จะตั้งค่าสำหรับงานเล็ก ๆ จำกัดจำนวนครั้งที่ลองเสมอ มิฉะนั้นเอเจนต์จะใช้โควตาการสมัครสมาชิกของคุณจนหมดในชั่วข้ามคืน ฉันอธิบายวิธีกำหนดขีดจำกัดการใช้จ่ายไว้ในบทความแยก

วิธีเพิ่มขีดจำกัด

ตัวเลือกที่ 1: ขอให้ Claude ทำ Claude เลือกระยะเวลาสำหรับคำสั่งแต่ละคำสั่ง คุณไม่ต้องกำหนดเอง แต่คุณสามารถเขียนในงานว่า: “ให้เซิร์ฟเวอร์พัฒนาทำงานเบื้องหลังเป็นเวลา 2 ชั่วโมง” วิธีนี้กำหนดเวลาได้ไม่เกิน 2 ชั่วโมง

ตัวเลือกที่ 2: ตั้งค่าตัวแปรในไฟล์การตั้งค่า ค่าเหล่านี้ใช้หน่วยมิลลิวินาที คุณไม่สามารถลดขีดจำกัดให้ต่ำกว่า 30 นาทีและ 2 ชั่วโมงได้ ทำได้เพียงเพิ่มขีดจำกัดเท่านั้น

  • BASH_DEFAULT_TIMEOUT_MS หากตั้งค่าให้สูงกว่า 1800000 (30 นาที) ค่าเริ่มต้น 30 นาทีจะเปลี่ยนไป ตัวแปรนี้มีผลทั้งกับคำสั่งที่ Claude เริ่มทำงานเบื้องหลังโดยไม่ระบุเวลา และคำสั่งที่ย้ายไปทำงานเบื้องหลังหลังหมดเวลารอ หากตั้งค่าสูงกว่า 7200000 (2 ชั่วโมง) เพดานเวลาก็จะเพิ่มขึ้นด้วย
  • BASH_MAX_TIMEOUT_MS หากตั้งค่าสูงกว่า 7200000 เพดาน 2 ชั่วโมงจะเพิ่มขึ้น ตัวแปรนี้ไม่เปลี่ยนค่าเริ่มต้น 30 นาที คำสั่งที่ไม่ได้กำหนดเวลาไว้เองยังคงหยุดหลังผ่านไป 30 นาที

BASH_DEFAULT_TIMEOUT_MS มีผลข้างเคียง ตัวแปรเดียวกันนี้กำหนดระยะเวลาที่ Claude รอคำสั่งทั่วไปก่อนย้ายไปทำงานเบื้องหลัง ตั้งไว้ 1 ชั่วโมง แล้ว Claude จะรอ 1 ชั่วโมงแทน 2 นาที เรื่องนี้ไม่เป็นปัญหาตอนกลางคืน แต่ในช่วงกลางวัน คุณจะรอคำตอบนานขึ้นเมื่อคำสั่งใช้เวลานาน

หากไม่ต้องการไล่ดูรายละเอียด: หากต้องการเวลา 3 ชั่วโมงทั้งสำหรับคำสั่งทั่วไปและเพดาน ให้ตั้ง BASH_DEFAULT_TIMEOUT_MS เป็น 10800000 เท่านี้ก็พอ ไม่จำเป็นต้องใช้ตัวแปรที่สอง

ไฟล์การตั้งค่าอยู่ในโฟลเดอร์ .claude ภายในไดเรกทอรีโฮมของคุณ: ~/.claude/settings.json บน macOS และ Linux และ %USERPROFILE%\.claude\settings.json บน Windows หากไม่มีไฟล์นี้ ให้สร้างขึ้นมา ตัวอย่างการตั้งค่าขีดจำกัด 1 ชั่วโมง:

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

หากไฟล์มีบล็อก env อยู่แล้ว ให้เพิ่มบรรทัดนี้เข้าไป เมื่อบันทึกไฟล์ เซสชันที่กำลังทำงานอยู่จะนำค่าใหม่ไปใช้ การลบตัวแปรจะมีผลเมื่อเริ่ม claude ครั้งถัดไปเท่านั้น

ไฟล์นี้ต้องอยู่บนเครื่องที่เอเจนต์กำลังทำงาน หากต้องการให้เอเจนต์ทำงานข้ามคืน คอมพิวเตอร์ต้องไม่เข้าสู่โหมดพักเครื่อง อีกทางเลือกหนึ่งคือเรียกใช้ Claude Code บนเซิร์ฟเวอร์ระยะไกล แล้วบันทึกการตั้งค่าไว้ที่นั่น

หากคำสั่งหยุดไปแล้ว

คุณไม่จำเป็นต้องจัดการอะไรด้วยตัวเอง Claude Code แจ้ง Claude ว่าทำไมคำสั่งจึงหยุด ดังนั้นให้ถาม Claude ก่อนว่าเกิดอะไรขึ้น

จากนั้นทำตามขั้นตอนทีละข้อ:

  1. การทำงานครั้งเดียวที่ใช้เวลานานไม่เกิน 2 ชั่วโมง ขอให้ Claude เรียกใช้คำสั่งอีกครั้งโดยกำหนดเวลาให้นานขึ้น
  2. คำสั่งมักใช้เวลานานกว่า 30 นาที ตั้ง BASH_DEFAULT_TIMEOUT_MS ให้สูงกว่า 1800000 ในไฟล์การตั้งค่า ตามตัวอย่างด้านบน หากต้องการเวลามากกว่า 2 ชั่วโมง ให้ตั้ง BASH_MAX_TIMEOUT_MS ให้สูงกว่า 7200000 ในไฟล์เดียวกันด้วย
  3. เรียกใช้คำสั่งอีกครั้ง เอกสารไม่ได้รับรองว่าจะเกิดอะไรขึ้นกับคำสั่งที่กำลังทำงานเบื้องหลังอยู่ก่อนที่จะเปลี่ยนการตั้งค่า
  4. ตรวจสอบผลการทำงานครั้งถัดไป หากรายงานของ Claude มีข้อความ “stopped after reaching its background time limit” อีกครั้ง แสดงว่าการตั้งค่าไม่มีผลกับคำสั่งนั้น

ซับเอเจนต์และรูทีนช่วยให้เอเจนต์ทำงานต่อได้ในระหว่างที่คุณไม่อยู่

ฉันอธิบายวิธีให้เอเจนต์ทำงานวนซ้ำตลอดทั้งคืนไว้ในบทความแยก ส่วนวิธีกำหนดค่า Claude Code เพื่อไม่ให้ทำโปรเจกต์พังข้ามคืน อธิบายไว้ที่นี่

ตรวจสอบว่าขั้นตอนไหนทำให้การทำงานข้ามคืนหยุด แล้วเปรียบเทียบสาเหตุกับขีดจำกัดด้านบน

แหล่งที่มา

ทำความรู้จักกับ Ailoot

รายละเอียดเพิ่มเติม

คำถามที่พบบ่อย

เปิดเซสชันโต้ตอบทิ้งข้ามคืนจะติดขีดจำกัด 30 นาทีหรือไม่?

ใน Claude Code 2.1.288 ขึ้นไป ขีดจำกัดในบทความใช้กับงานไม่มีผู้ดูแล เช่น -p, Agent SDK, CI และเซสชันคลาวด์ การเปิดเซสชันโต้ตอบปกติในเครื่องทิ้งไว้ไม่ทำให้เข้ากลุ่มนั้น

เพิ่ม timeout แล้วเซิร์ฟเวอร์อยู่ต่อหลังจบ -p ได้หรือไม่?

ไม่ได้ คำสั่งเบื้องหลังในงาน -p จะจบไม่นานหลังคำตอบสุดท้าย timeout เปลี่ยนเวลาคำสั่งระหว่างงาน ไม่ได้เปลี่ยนงานให้เป็นโฮสติ้งถาวร

บทความทั้งหมด