Background Exec + أداة Process
يشغّل OpenClaw أوامر shell عبر أداةexec ويحتفظ بالمهام طويلة التشغيل في الذاكرة. وتدير أداة process جلسات الخلفية هذه.
أداة exec
المعلمات الأساسية:command(مطلوب)yieldMs(الافتراضي 10000): التحويل التلقائي إلى الخلفية بعد هذا التأخيرbackground(منطقي): التشغيل في الخلفية فورًاtimeout(بالثواني، الافتراضي 1800): إنهاء العملية بعد هذه المهلةelevated(منطقي): التشغيل خارج sandbox إذا كان الوضع المرتفع ممكّنًا/مسموحًا (gatewayافتراضيًا، أوnodeعندما يكون هدف exec هوnode)- هل تحتاج إلى TTY حقيقي؟ اضبط
pty: true. workdirوenv
- تعيد عمليات التشغيل الأمامية المخرجات مباشرة.
- عند تشغيلها في الخلفية (صراحةً أو بسبب المهلة)، تعيد الأداة
status: "running"+sessionIdوذيلًا قصيرًا. - يتم الاحتفاظ بالمخرجات في الذاكرة حتى يتم استطلاع الجلسة أو مسحها.
- إذا كانت أداة
processغير مسموح بها، يعملexecبشكل متزامن ويتجاهلyieldMs/background. - تتلقى أوامر exec التي تم إنشاؤها المتغير
OPENCLAW_SHELL=execلاستخدامه في قواعد shell/profile المعتمدة على السياق. - بالنسبة إلى العمل طويل التشغيل الذي يبدأ الآن، ابدأه مرة واحدة واعتمد على تنبيه الإكمال التلقائي عند تمكينه وعندما يصدر الأمر مخرجات أو يفشل.
- إذا لم يكن تنبيه الإكمال التلقائي متاحًا، أو كنت تحتاج إلى
تأكيد نجاح صامت لأمر انتهى بنجاح من دون مخرجات، فاستخدم
processلتأكيد الاكتمال. - لا تحاكِ التذكيرات أو المتابعات المؤجلة باستخدام حلقات
sleepأو الاستطلاع المتكرر؛ استخدم cron للأعمال المستقبلية.
ربط العمليات الفرعية
عند إنشاء عمليات فرعية طويلة التشغيل خارج أدوات exec/process (على سبيل المثال، إعادة تشغيل CLI أو مساعدات gateway)، قم بإرفاق مساعد ربط العمليات الفرعية حتى تتم إعادة توجيه إشارات الإنهاء وإزالة المستمعين عند الخروج/الخطأ. وهذا يمنع العمليات اليتيمة على systemd ويحافظ على اتساق سلوك الإيقاف عبر المنصات. تجاوزات البيئة:PI_BASH_YIELD_MS: مهلة yield الافتراضية (مللي ثانية)PI_BASH_MAX_OUTPUT_CHARS: الحد الأقصى للمخرجات في الذاكرة (أحرف)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: الحد الأقصى المعلق لـ stdout/stderr لكل تدفق (أحرف)PI_BASH_JOB_TTL_MS: مدة بقاء الجلسات المكتملة (مللي ثانية، ومقيدة بين 1m–3h)
tools.exec.backgroundMs(الافتراضي 10000)tools.exec.timeoutSec(الافتراضي 1800)tools.exec.cleanupMs(الافتراضي 1800000)tools.exec.notifyOnExit(الافتراضي true): يضيف حدث نظام إلى الطابور + يطلب heartbeat عند خروج exec الذي يعمل في الخلفية.tools.exec.notifyOnExitEmptySuccess(الافتراضي false): عند ضبطه على true، يضيف أيضًا أحداث اكتمال لعمليات الخلفية الناجحة التي لم تنتج أي مخرجات.
أداة process
الإجراءات:list: الجلسات الجارية + المكتملةpoll: سحب المخرجات الجديدة لجلسة ما (ويبلغ أيضًا عن حالة الخروج)log: قراءة المخرجات المجمعة (يدعمoffset+limit)write: إرسال stdin (data، معeofاختياري)send-keys: إرسال رموز مفاتيح أو بايتات صريحة إلى جلسة مدعومة بـ PTYsubmit: إرسال Enter / carriage return إلى جلسة مدعومة بـ PTYpaste: إرسال نص حرفي، مع إمكانية تغليفه بوضع اللصق المحاطkill: إنهاء جلسة خلفيةclear: إزالة جلسة مكتملة من الذاكرةremove: الإنهاء إذا كانت قيد التشغيل، وإلا المسح إذا كانت مكتملة
- يتم عرض/الاحتفاظ في الذاكرة فقط بالجلسات التي تعمل في الخلفية.
- تُفقد الجلسات عند إعادة تشغيل العملية (لا يوجد حفظ على القرص).
- لا تُحفَظ سجلات الجلسة في سجل الدردشة إلا إذا شغّلت
process poll/logوتم تسجيل نتيجة الأداة. - يكون
processضمن نطاق كل وكيل؛ فهو لا يرى إلا الجلسات التي بدأها ذلك الوكيل. - استخدم
poll/logللحالة، والسجلات، وتأكيد النجاح الصامت، أو تأكيد الاكتمال عندما لا يكون تنبيه الإكمال التلقائي متاحًا. - استخدم
write/send-keys/submit/paste/killعندما تحتاج إلى إدخال أو تدخل. - يتضمن
process listحقلnameمشتقًا (فعل الأمر + الهدف) للفحص السريع. - يستخدم
process logالقيمتينoffset/limitعلى أساس الأسطر. - عند حذف كل من
offsetوlimit، يعيد آخر 200 سطر ويتضمن تلميحًا للتصفح. - عند توفير
offsetوحذفlimit، يعيد منoffsetحتى النهاية (ولا يُقيد بـ 200). - الاستطلاع مخصص للحالة عند الطلب، وليس لجدولة حلقات الانتظار. إذا كان العمل يجب أن يحدث لاحقًا، فاستخدم cron بدلًا من ذلك.