Claude Code: ขีดจำกัดคำสั่งเบื้องหลัง 30 นาที
MarkdownClaude 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 ขีดจำกัดนี้มีผลกับทุกเซสชัน
พูดอีกอย่างคือ ขีดจำกัดนี้มีผลเมื่อคุณไม่อยู่ตรงนั้น ได้แก่ การทำงานด้วย -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 ก่อนว่าเกิดอะไรขึ้น
จากนั้นทำตามขั้นตอนทีละข้อ:
- การทำงานครั้งเดียวที่ใช้เวลานานไม่เกิน 2 ชั่วโมง ขอให้ Claude เรียกใช้คำสั่งอีกครั้งโดยกำหนดเวลาให้นานขึ้น
- คำสั่งมักใช้เวลานานกว่า 30 นาที ตั้ง
BASH_DEFAULT_TIMEOUT_MSให้สูงกว่า1800000ในไฟล์การตั้งค่า ตามตัวอย่างด้านบน หากต้องการเวลามากกว่า 2 ชั่วโมง ให้ตั้งBASH_MAX_TIMEOUT_MSให้สูงกว่า7200000ในไฟล์เดียวกันด้วย - เรียกใช้คำสั่งอีกครั้ง เอกสารไม่ได้รับรองว่าจะเกิดอะไรขึ้นกับคำสั่งที่กำลังทำงานเบื้องหลังอยู่ก่อนที่จะเปลี่ยนการตั้งค่า
- ตรวจสอบผลการทำงานครั้งถัดไป หากรายงานของ Claude มีข้อความ “stopped after reaching its background time limit” อีกครั้ง แสดงว่าการตั้งค่าไม่มีผลกับคำสั่งนั้น
ซับเอเจนต์และรูทีนช่วยให้เอเจนต์ทำงานต่อได้ในระหว่างที่คุณไม่อยู่
ฉันอธิบายวิธีให้เอเจนต์ทำงานวนซ้ำตลอดทั้งคืนไว้ในบทความแยก ส่วนวิธีกำหนดค่า Claude Code เพื่อไม่ให้ทำโปรเจกต์พังข้ามคืน อธิบายไว้ที่นี่
ตรวจสอบว่าขั้นตอนไหนทำให้การทำงานข้ามคืนหยุด แล้วเปรียบเทียบสาเหตุกับขีดจำกัดด้านบน
แหล่งที่มา
- Claude Code: เอกสารอ้างอิงเครื่องมือ - ขอบเขตการใช้ขีดจำกัด เวอร์ชัน 2.1.285 และ 2.1.288 ระยะเวลา 30 นาทีและ 2 ชั่วโมง การย้ายคำสั่งไปทำงานเบื้องหลังหลังหมดเวลารอ ข้อความแจ้งเตือน และตัวแปร BASH_DEFAULT_TIMEOUT_MS กับ BASH_MAX_TIMEOUT_MS
- Claude Code: ตัวแปรสภาพแวดล้อม - ค่าเริ่มต้น 2 นาทีสำหรับคำสั่งทั่วไป บล็อก env ใน ~/.claude/settings.json และเวลาที่เซสชันนำค่าใหม่ไปใช้
- Claude Code: การทำงานแบบไม่มีส่วนติดต่อผู้ใช้ - การทำงานด้วย -p; คำสั่งเบื้องหลังจะยุติลงประมาณ 5 วินาทีหลังคำตอบสุดท้าย
- Claude Code: การตั้งค่า - ตำแหน่งของ ~/.claude/settings.json บน Windows
ทำความรู้จักกับ Ailoot
รายละเอียดเพิ่มเติม
คำถามที่พบบ่อย
เปิดเซสชันโต้ตอบทิ้งข้ามคืนจะติดขีดจำกัด 30 นาทีหรือไม่?
ใน Claude Code 2.1.288 ขึ้นไป ขีดจำกัดในบทความใช้กับงานไม่มีผู้ดูแล เช่น -p, Agent SDK, CI และเซสชันคลาวด์ การเปิดเซสชันโต้ตอบปกติในเครื่องทิ้งไว้ไม่ทำให้เข้ากลุ่มนั้น
เพิ่ม timeout แล้วเซิร์ฟเวอร์อยู่ต่อหลังจบ -p ได้หรือไม่?
ไม่ได้ คำสั่งเบื้องหลังในงาน -p จะจบไม่นานหลังคำตอบสุดท้าย timeout เปลี่ยนเวลาคำสั่งระหว่างงาน ไม่ได้เปลี่ยนงานให้เป็นโฮสติ้งถาวร