SYSTEMD-RUN(1)

الاسم
systemd-run - تشغيل البرامج في وحدات نطاق عابرة، أو وحدات خدمة، أو وحدات خدمة مفعلة بالمسار أو المقبس أو الموقت

موجز

systemd-run [خيارات...] أمر [وسائط...]

systemd-run [خيارات...] [خيارات مسار...] {أمر [وسائط...]}

systemd-run [خيارات...] [خيارات مقبس...] {أمر [وسائط...]}

systemd-run [خيارات...] [خيارات موقت...] {أمر [وسائط...]}

الوصف

يمكن استخدام systemd-run لإنشاء وبدء وحدة .service أو .scope عابرة وتشغيل الأمر المحدد فيها. يمكن استخدامه أيضًا لإنشاء وبدء وحدة .path أو .socket أو .timer عابرة، تقوم بتفعيل وحدة .service عند انقضائها.

إذا شُغّل أمر كوحدة خدمة عابرة، فسيبدأ ويدار بواسطة مدير الخدمة مثل أي خدمة أخرى، وبالتالي يظهر في مخرجات systemctl list-units مثل أي وحدة أخرى. سيعمل في بيئة تنفيذ نظيفة ومنفصلة، مع مدير الخدمة كعملية أصل له. في هذا الوضع، سيبدأ systemd-run الخدمة بشكل غير متزامن في الخلفية ويعود بعد بدء تنفيذ الأمر (ما لم يُحدد --no-block أو --wait أو --pipe أو --pty، انظر أدناه).

إذا شُغّل أمر كوحدة نطاق عابرة، فسينفذه systemd-run نفسه كعملية أصل وبالتالي سيرث بيئة تنفيذ المتصل. ومع ذلك، تدير عمليات الأمر بواسطة مدير الخدمة بشكل مشابه للخدمات العادية، وستظهر في مخرجات systemctl list-units. التنفيذ في هذه الحالة متزامن، وسيعود فقط عند انتهاء الأمر. يُمكّن هذا الوضع عبر المفتاح --scope (انظر أدناه).

إذا شُغّل أمر مع خيارات مسار أو مقبس أو موقت مثل --on-calendar= (انظر أدناه)، فستُنشئ وحدة مسار أو مقبس أو موقت عابرة إلى جانب وحدة الخدمة للأمر المحدد. فقط وحدة المسار أو المقبس أو الموقت العابرة تبدأ فورًا، وستُفعل وحدة الخدمة العابرة بواسطة وحدة المسار أو المقبس أو الموقت. إذا حُدد الخيار --unit=، فقد يُحذف الأمر. في هذه الحالة، ينشئ systemd-run فقط وحدة .path أو .socket أو .timer تقوم بتفعيل الوحدة المحددة.

مبدئيًا، تكون الخدمات المنشأة مع systemd-run من النوع simple مبدئيًا، انظر وصف Type= في systemd.service(5) للتفاصيل. لاحظ أنه عند استخدام هذا النوع، يعتبر مدير الخدمة (وبالتالي أمر systemd-run) بدء الخدمة ناجحًا بمجرد نجاح fork() لعملية الخدمة الرئيسة، أي قبل استدعاء execve()، وبالتالي حتى إذا تعذر بدء الأمر المحدد. فكر في استخدام نوع الخدمة exec (أي --property=Type=exec) لضمان عودة systemd-run بنجاح فقط إذا بُدأ سطر الأوامر المحدد بنجاح.

بعد أن يمرر systemd-run الأمر إلى مدير الخدمة، يقوم المدير بتوسيع المتغيرات. هذا يعني أن أحرف الدولار ("$") التي لا ينبغي توسيعها تحتاج إلى الهروب كـ "$$". يمكن أيضًا تعطيل التوسيع باستخدام --expand-environment=no.

الخيارات

الخيارات التالية مفهومة:

--scope
    إنشاء وحدة .scope عابرة بدلاً من وحدة .service العابرة المبدئية (انظر أعلاه).

    أُضيف في الإصدارة 206.

--unit=, -u
    استخدم اسم الوحدة هذا بدلاً من اسم مولد آلياً.

    أُضيف في الإصدارة 206.

--property=، -p
    يضبط خاصية على وحدة النطاق أو الخدمة المنشأة. يأخذ هذا الخيار تعيينًا بنفس تنسيق أمر systemctl(1)'s set-property.

    أُضيف في الإصدارة 211.

--description=
    تقديم وصف لوحدة الخدمة أو النطاق أو المسار أو المقبس أو الموقت. إذا لم يُحدد، فسيستخدم الأمر نفسه كوصف. انظر Description= في systemd.unit(5).

    أُضيف في الإصدارة 206.

--slice=
    جعل وحدة .service أو .scope الجديدة جزءًا من الشريحة المحددة، بدلاً من system.slice (عند التشغيل في وضع --system) أو الشريحة الجذرية (عند التشغيل في وضع --user).

    أُضيف في الإصدارة 206.

--slice-inherit
    جعل وحدة .service أو .scope الجديدة جزءًا من الشريحة التي اُستدعي systemd-run نفسه فيها. يمكن دمج هذا الخيار مع --slice=، وفي هذه الحالة توضع الشريحة المحددة عبر --slice= داخل الشريحة التي اُستدعي أمر systemd-run فيها.

    مثال: افترض أن systemd-run اُستدعي في الشريحة foo.slice، ووسيطة --slice= هي bar. ستوضع الوحدة بعد ذلك تحت foo-bar.slice.

    أُضيف في الإصدار 246.

--expand-environment=قيمة_منطقية
    توسيع متغيرات البيئة في وسائط الأمر. إذا مُكّن (المبدئي)، فستُوسع متغيرات البيئة المحددة كـ "${متغير}" بنفس الطريقة كما في الأوامر المحددة عبر ExecStart= في الوحدات. مع --scope، يُوسع هذا بواسطة systemd-run نفسه، وفي حالات أخرى بواسطة مدير الخدمة الذي يولد الأمر. لاحظ أن هذا مشابه، لكن ليس نفس توسيع المتغيرات في bash(1) والأصداف الأخرى.

    انظر systemd.service(5) لوصف توسيع المتغيرات. تعطيل توسيع المتغيرات مفيد إذا كان الأمر المحدد يتضمن أو قد يتضمن علامة "$".

    أُضيف في الإصدار 254.

-r, --remain-after-exit
    بعد إنهاء عملية الخدمة، أبقِ الخدمة موجودة حتى يُوقف صراحة. هذا مفيد لجمع معلومات وقت التشغيل حول الخدمة بعد انتهائها من التشغيل. انظر أيضًا RemainAfterExit= في systemd.service(5).

    أُضيف في الإصدارة 207.

--send-sighup
    عند إنهاء وحدة النطاق أو الخدمة، أرسل إشارة SIGHUP فورًا بعد SIGTERM. هذا مفيد للإشارة إلى الصدفات والعمليات الشبيهة بالصدفة بأن الاتصال قد انقطع. انظر أيضًا SendSIGHUP= في systemd.kill(5).

    أُضيف في الإصدارة 207.

--service-type=
    يضبط نوع الخدمة. انظر أيضًا Type= في systemd.service(5). ليس لهذا الخيار أي تأثير مع --scope. المبدئي هو simple.

    أُضيف في الإصدارة 211.

--uid=, --gid=
    يشغّل عملية الخدمة تحت المستخدم والمجموعة UNIX المحددين. انظر أيضًا User= و Group= في systemd.exec(5).

    أُضيف في الإصدارة 211.

--nice=
    يشغّل عملية الخدمة بمستوى nice المحدد. انظر أيضًا Nice= في systemd.exec(5).

    أُضيف في الإصدارة 211.

--working-directory=
    يشغّل عملية الخدمة بدليل العمل المحدد. انظر أيضًا WorkingDirectory= في systemd.exec(5).

    أُضيف في الإصدار 240.

--same-dir, -d
    مشابه لـ --working-directory=، لكنه يستخدم دليل العمل الحالي للمستدعي لتنفيذ الخدمة.

    أُضيف في الإصدار 240.

--root-directory=
    يشغّل عملية الخدمة بدليل الجذر المحدد. انظر أيضًا RootDirectory= في systemd.exec(5).

    لاحظ أن المسار يُبحث عنه داخل مساحة اسم نظام الملفات التي يعمل فيها systemd-run، والتي قد تختلف عن مساحة اسم نظام الملفات التي تعمل فيها عملية المدير. استخدم الخاصية RootDirectory= مباشرة إذا أردت البحث عن المسار في مساحة اسم نظام الملفات لعملية المدير.

    أُضيف في الإصدار 259.

--same-root-dir, -R
    مشابه لـ --root-directory=، لكنه يستخدم دليل الجذر لعملية systemd-run كدليل الجذر لتنفيذ الخدمة فيه.

    أُضيف في الإصدار 259.

-E الاسم[=القيمة]، --setenv=الاسم[=القيمة]
    يشغّل عملية الخدمة مع تعيين متغير البيئة المحدد. يمكن استخدام هذه المعلمة أكثر من مرة لتعيين متغيرات متعددة. عند حذف "=" و VALUE، ستُستخدم قيمة المتغير الذي يحمل نفس الاسم في بيئة البرنامج.

    انظر أيضًا Environment= في systemd.exec(5).

    أُضيف في الإصدارة 211.

--pty, -t
    عند استدعاء الأمر، تصل الخدمة المؤقتة مدخلاتها ومخرجاتها وأخطاءها القياسية بالطرفية التي استُدعي عليها systemd-run، عبر جهاز TTY زائف. يسمح هذا بتشغيل البرامج التي تتوقع إدخال/إخراج تفاعلي للمستخدم كخدمات، مثل الصدفات التفاعلية.

    سيؤدي هذا الخيار إلى انتظار systemd-run بشكل متزامن لإنهاء الخدمة المؤقتة، مشابهًا لتحديد --wait. إذا حُدد مع --wait، فلن يخرج systemd-run عند قطع الاتصال يدويًا من جهاز TTY الزائف.

    لاحظ أن أمر shell في machinectl(1) هو عادة بديل أفضل لطلب جلسة ولوج تفاعلية جديدة على المضيف المحلي أو الحاوية المحلية.

    انظر أدناه للتفاصيل حول كيفية دمج هذا المفتاح مع --pipe.

    أُضيف في الإصدارة 219.

--pty-late, -T
    مشابه جدًا لـ --pty، لكن اتصال PTY يبدأ فقط بعد اكتمال بدء الوحدة. هذا يعني فعليًا أن إدخال PTY أثناء ExecStartPre= لخدمة غير متاح عند استخدام --pty-late، بينما هو متاح باستخدام --pty، لمعظم أنواع الخدمات. ومع ذلك، إذا استُخدم هذا الخيار، فسيكون الوصول إلى TTY المستدعي متاحًا لاستعلامات كلمة المرور (انظر --no-ask-password أدناه) أثناء بدء تشغيل الوحدة.

    أُضيف في الإصدار 258.

--pipe، -P
    إذا حُدد، تُورث المدخلات والمخرجات والأخطاء القياسية للخدمة المؤقتة من أمر systemd-run نفسه. يسمح هذا باستخدام systemd-run داخل خطوط أنابيب الصدفة.

    لاحظ أن هذا الوضع غير مناسب لصدفات الأوامر التفاعلية وما شابه، لأن عملية الخدمة لن تصبح متحكم TTY عند استدعائها على طرفية. استخدم --pty بدلاً من ذلك في هذه الحالة.

    عند استخدام كل من --pipe و --pty معًا، يُحدد الخيار الأكثر ملاءمة آليًا ويُستخدم. تحديدًا، عند الاستدعاء مع الإدخال والإخراج والخطأ القياسي المتصل بـ TTY، يُستخدم --pty، وإلا يُستخدم --pipe.

    سيؤدي هذا الخيار إلى انتظار systemd-run بشكل متزامن لإنهاء الخدمة المؤقتة، على غرار تحديد --wait.

    عند استخدام هذا الخيار، تُمرر واصفات الملفات الأصلية التي يستقبلها systemd-run إلى عمليات الخدمة كما هي. إذا كانت الخدمة تعمل بصلاحيات مختلفة عن systemd-run، فهذا يعني أن الخدمة قد لا تتمكن من إعادة فتح واصفات الملفات الممررة، بسبب قيود الوصول العادية لواصفات الملفات. إذا كانت العملية المستدعاة هي سكربت شل يستخدم بناء echo "hello" >/dev/stderr لكتابة الرسائل إلى stderr، فقد يسبب هذا مشاكل، لأن هذا يعمل فقط إذا أمكن إعادة فتح stderr. للتخفيف من ذلك، استخدم البناء echo "hello" >&2 بدلاً من ذلك، وهو مكافئ إلى حد كبير ويتجنب هذا المأزق.

    أُضيف في الإصدارة 235.

--shell, -S
    اختصار لـ "--pty --same-dir --wait --collect --service-type=exec $SHELL"، أي طلب شل تفاعلي في دليل العمل الحالي، يعمل في سياق الخدمة، يمكن الوصول إليه بمفتاح واحد.

    أُضيف في الإصدار 240.

--quiet،‏ -q
    يكبت المخرجات المعلوماتية الإضافية أثناء التشغيل. هذا مفيد بشكل خاص مع --pty حيث سيكبت الرسالة الأولية التي تشرح كيفية إنهاء اتصال TTY.

    أُضيف في الإصدارة 219.

-v، --verbose
    عرض مخرجات سجل الوحدة أثناء التشغيل.

    أُضيف في الإصدار 258.

--output=
    يتحكم في تنسيق مخرجات سجل الوحدة المطولة، انظر journalctl(1) للقيم الممكنة.

    أُضيف في الإصدار 261.

--on-active=, --on-boot=, --on-startup=, --on-unit-active=, --on-unit-inactive=
    يُعرف مؤقتًا رتيبًا بالنسبة لنقاط بدء مختلفة لبدء الأمر المحدد. انظر OnActiveSec=, OnBootSec=, OnStartupSec=, OnUnitActiveSec= و OnUnitInactiveSec= في systemd.timer(5) للتفاصيل. هذه الخيارات هي اختصارات لـ --timer-property= مع الخصائص ذات الصلة. لا يجوز دمج هذه الخيارات مع --scope أو --pty.

    أُضيف في الإصدارة 218.

--on-calendar=
    يُعرف مؤقتًا تقويميًا لبدء الأمر المحدد. انظر OnCalendar= في systemd.timer(5). هذا الخيار هو اختصار لـ --timer-property=OnCalendar=. لا يجوز دمج هذا الخيار مع --scope أو --pty.

    أُضيف في الإصدارة 218.

--on-clock-change, --on-timezone-change
    يُعرف مشغلًا بناءً على قفزات ساعة النظام أو تغييرات المنطقة الزمنية لبدء الأمر المحدد. انظر OnClockChange= و OnTimezoneChange= في systemd.timer(5). هذه الخيارات هي اختصارات لـ --timer-property=OnClockChange=yes و --timer-property=OnTimezoneChange=yes. لا يجوز دمج هذه الخيارات مع --scope أو --pty.

    أُضيف في الإصدارة 242.

--path-property=, --socket-property=, --timer-property=
    يضبط خاصية على وحدة المسار أو المقبس أو المؤقت التي تُنشأ. هذا الخيار مشابه لـ --property=، لكنه يُطبق على وحدة المسار أو المقبس أو المؤقت المؤقتة بدلاً من وحدة الخدمة المؤقتة المنشأة. يأخذ هذا الخيار إسنادًا بنفس تنسيق أمر set-property في systemctl(1). لا يجوز دمج هذه الخيارات مع --scope أو --pty.

    أُضيف في الإصدارة 218.

--no-block
    لا تنتظر بشكل متزامن اكتمال عملية بدء الوحدة. إذا لم يُحدد هذا الخيار، فسيُتحقق من طلب بدء الوحدة المؤقتة ووضعه في قائمة الانتظار وسينتظر systemd-run حتى يكتمل بدء تشغيل الوحدة. بتمرير هذه الوسيطة، يُتحقق منها ووضعها في قائمة الانتظار فقط. لا يجوز دمج هذا الخيار مع --wait.

    أُضيف في الإصدارة 220.

--wait
    انتظر بشكل متزامن إنهاء الخدمة المؤقتة. إذا حُدد هذا الخيار، يُتحقق من طلب بدء الوحدة المؤقتة ووضعه في قائمة الانتظار والانتظار له. بعد ذلك، تُراقب الوحدة المستدعاة، ويُنتظر حتى تُعطل مرة أخرى (على الأرجح لأن الأمر المحدد اكتمل). عند الخروج، تُعرض معلومات موجزة عن وقت تشغيل الوحدة، بما في ذلك إجمالي وقت التشغيل (بالإضافة إلى بيانات محاسبة وحدة المعالجة المركزية والذاكرة والإدخال/الإخراج وعنوان IP، إذا كانت إعدادات محاسبة cgroup المقابلة مفعلة) ورمز الخروج وحالة العملية الرئيسية. يمكن كبت هذا المخرج باستخدام --quiet. لا يجوز دمج هذا الخيار مع --no-block أو --scope أو خيارات المسار أو المقبس أو المؤقت المختلفة.

    أُضيف في الإصدار 232.

-G، --collect
    أفرغ الوحدة المؤقتة بعد اكتمالها، حتى لو فشلت. عادةً، بدون هذا الخيار، تُحفظ جميع الوحدات التي شغلت وفشلت في الذاكرة حتى يعيد المستخدم تعيين حالة الفشل الخاصة بها صراحةً باستخدام systemctl reset-failed أو أمر مكافئ. من ناحية أخرى، تُفرغ الوحدات التي شغلت بنجاح فورًا. إذا شُغل هذا الخيار، يصبح "جمع القمامة" للوحدات أكثر عدوانية، ويفرغ الوحدات بغض النظر عما إذا كانت قد خرجت بنجاح أو فشلت. هذا الخيار هو اختصار لـ --property=CollectMode=inactive-or-failed، انظر شرح CollectMode= في systemd.unit(5) لمزيد من المعلومات.

    أُضيف في الإصدارة 236.

--job-mode=MODE
    عند وضع وظيفة جديدة في قائمة الانتظار، يتحكم هذا الخيار في كيفية التعامل مع الوظائف الموجودة بالفعل في قائمة الانتظار.

    يأخذ الخيار نفس قيم الوضع مثل خيار --job-mode= في systemctl(1). وضع الوظيفة المبدئي هو "fail".

    تشغيل --job-mode=help يعرض قائمة بأوضاع الوظائف المتاحة.

    أُضيف في الإصدار 258.

--ignore-failure
    مبدئيًا، إذا فشل الأمر المحدد، فستُوضع علامة فشل على الوحدة المستدعاة (على الرغم من احتمال إفراغها، انظر --collect= أعلاه)، ويُبلغ عن ذلك في السجلات. إذا حُدد هذا المفتاح، يُكبت ذلك ويُعالج أي حالة/رمز خروج غير ناجح للأمر على أنه نجاح.

    أُضيف في الإصدار 256.

--background=COLOR
    غيّر لون خلفية الطرفية إلى لون ANSI المحدد طالما استمرت الجلسة. يجب أن يكون اللون المحدد لون خلفية ANSI X3.64 SGR، أي سلاسل مثل "40"، "41"، ...، "47"، "48;2;..."، "48;5;...". انظر ANSI Escape Code (Wikipedia)[1] للتفاصيل.

    أُضيف في الإصدار 256.

--user
    تحدث مع مدير خدمة المستدعِي، بدلاً من مدير خدمة النظام.

--system
    تحدث مع مدير خدمة النظام. هذا هو المبدئي الضمني.

-H، --host=
    نفّذ العملية عن بُعد. حدد اسم مضيف، أو اسم مستخدم واسم مضيف يفصل بينهما "@" للاتصال به. يمكن اختيارياً إلحاق اسم المضيف بمنفذ يستمع إليه ssh، مفصولاً بـ ":"، ثم اسم حاوية، مفصولاً بـ "/"، مما يوصل مباشرة بحاوية معينة على المضيف المحدد. سيستخدم هذا SSH للتحدث إلى نسخة مدير الحاسوب البعيد. يمكن سرد أسماء الحاويات باستخدام machinectl -H المضيف. ضع عناوين IPv6بين قوسين.

-M، --machine=
    نفّذ العملية على حاوية محلية. حدد اسم الحاوية للاتصال بها، مسبوقًا اختياريًا باسم مستخدم للاتصال به وحرف "@" كفاصل. إذا استُخدمت السلسلة الخاصة ".host" بدلاً من اسم الحاوية، فسيُجرى اتصال بالنظام المحلي (وهو أمر مفيد للاتصال بناقل مستخدم معين: "--user --machine=lennart@.host"). إذا لم تُستخدم صيغة "@"، فسيُتصل كمستخدم جذر (root). إذا استُخدمت صيغة "@"، فيمكن حذف الجانب الأيسر أو الأيمن (ولكن ليس كلاهما) وفي هذه الحالة يُفترض اسم المستخدم المحلي و ".host".

-C، --capsule=
    نفذ العملية على كبسولة. حدد اسم الكبسولة للاتصال بها. راجع capsule@.service(5) لمزيد من التفاصيل حول الكبسولات.

    أُضيف في الإصدار 256.

--no-ask-password
    لا تسأل المستخدم عن الاستيثاق للعمليات ذات الامتيازات.

-h، --help
    اطبع نص مساعدة قصير واخرج.

--version
    اطبع سلسلة إصدار قصيرة واخرج.

--json=وضع
    يظهر المخرجات منسقة بصيغة JSON. يتوقع أحد الخيارات: "short" (لأقصر مخرج ممكن دون أي مسافات زائدة أو فواصل أسطر)، أو "pretty" (لنسخة جميلة من المخرج نفسه، مع إزاحة وفواصل أسطر) أو "off" (لإيقاف مخرجات JSON، وهو الخيار المبدئي).

--no-pager
    لا تقم بتوجيه المخرجات إلى أداة ترقيم الصفحات. ينطبق هذا حالياً فقط على --help. (لا يبدأ أداة ترقيم الصفحات أثناء التشغيل العادي.)

    أُضيف في الإصدار 258.

جميع وسائط سطر الأوامر بعد أول وسيطة غير خيار تصبح جزءاً من سطر أوامر العملية المُطلقة.

حالة الخروج

عند النجاح، يُرجع 0. إذا فشل systemd-run في بدء الخدمة، سيُرجع قيمة إرجاع غير صفرية. إذا انتظر systemd-run إنهاء الخدمة، ستُنشر قيمة الإرجاع من الخدمة. سيُرجع 0 عند النجاح، بما في ذلك جميع الحالات التي يعتبرها systemd أن الخدمة قد خرجت بشكل نظيف، انظر مناقشة SuccessExitStatus= في systemd.service(5).

أمثلة

مثال 1. تسجيل متغيرات البيئة المقدمة من systemd للخدمات

    # systemd-run env
    Running as unit: run-19945.service
    # journalctl -u run-19945.service
    Sep 08 07:37:21 bupkis systemd[1]: Starting /usr/bin/env...
    Sep 08 07:37:21 bupkis systemd[1]: Started /usr/bin/env.
    Sep 08 07:37:21 bupkis env[19948]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    Sep 08 07:37:21 bupkis env[19948]: LANG=en_US.UTF-8
    Sep 08 07:37:21 bupkis env[19948]: BOOT_IMAGE=/vmlinuz-3.11.0-0.rc5.git6.2.fc20.x86_64

مثال 2. تحديد الموارد المتاحة لأمر

    # systemd-run -p IOWeight=10 updatedb

يستدعي هذا الأمر أداة updatedb(8)، لكنه يخفض وزن الإدخال/الإخراج للكتلة إلى 10. انظر systemd.resource-control(5) لمزيد من المعلومات حول الخاصية IOWeight=.

مثال 3. تشغيل الأوامر في وقت محدد

سيلمس الأمر التالي ملفاً بعد 30 ثانية.

    # date; systemd-run --on-active=30 --timer-property=AccuracySec=100ms /bin/touch /tmp/foo
    Mon Dec  8 20:44:24 KST 2014
    Running as unit: run-71.timer
    Will run service as unit: run-71.service
    # journalctl -b -u run-71.timer
    -- Journal begins at Fri 2014-12-05 19:09:21 KST, ends at Mon 2014-12-08 20:44:54 KST. --
    Dec 08 20:44:38 container systemd[1]: Starting /bin/touch /tmp/foo.
    Dec 08 20:44:38 container systemd[1]: Started /bin/touch /tmp/foo.
    # journalctl -b -u run-71.service
    -- Journal begins at Fri 2014-12-05 19:09:21 KST, ends at Mon 2014-12-08 20:44:54 KST. --
    Dec 08 20:44:48 container systemd[1]: Starting /bin/touch /tmp/foo...
    Dec 08 20:44:48 container systemd[1]: Started /bin/touch /tmp/foo.

مثال 4. السماح بالوصول إلى tty

يستدعي الأمر التالي bash(1) كخدمة تمرر مدخلاتها ومخرجاتها وأخطاءها القياسية إلى TTY المُستدعي.

    # systemd-run -t --send-sighup bash

مثال 5. بدء screen كخدمة مستخدم

    $ systemd-run --scope --user screen
    Running scope as unit run-r14b0047ab6df45bfb45e7786cc839e76.scope.

    $ screen -ls
    There is a screen on:
            492..laptop     (Detached)
    1 Socket in /var/run/screen/S-fatima.

يبدأ هذا عملية screen كولد لعملية systemd --user التي بدأتها user@.service، في وحدة نطاق. تُستخدم وحدة systemd.scope(5) بدلاً من وحدة systemd.service(5)، لأن screen سيخرج عند فصله عن الطرفية، وسيُنهى وحدة الخدمة. تشغيل screen كوحدة مستخدم له ميزة أنه ليس جزءاً من نطاق الجلسة. إذا كُون KillUserProcesses=yes في logind.conf(5)، وهو المبدئي، سيُنهى نطاق الجلسة عندما يسجل المستخدم الخروج من تلك الجلسة.

يبدأ user@.service آلياً عندما يلج المستخدم لأول مرة، ويبقى موجوداً طالما أن جلسة ولوج واحدة على الأقل مفتوحة. بعد أن يخرج المستخدم من الجلسة الأخيرة، تُنهى user@.service وجميع الخدمات تحتها. هذا السلوك هو المبدئي، عندما لا يكون "الاستمرار" ممكناً لذلك المستخدم. تمكين الاستمرار يعني أن user@.service تُبدأ آلياً أثناء الإقلاع، حتى لو لم يكن المستخدم والجًا، وأن الخدمة لا تُنهى عندما يسجل المستخدم الخروج.

تمكين الاستمرار يسمح للمستخدم بتشغيل العمليات دون تسجيل الدخول، على سبيل المثال للسماح لـ screen بالاستمرار بعد أن يسجل المستخدم الخروج، حتى لو أُنهي نطاق الجلسة. في التهيئة المبدئية، يمكن للمستخدمين تمكين الاستمرار لأنفسهم:

    $ loginctl enable-linger

مثال 6. توسيع المتغير بواسطة المدير

    $ systemd-run -t echo "<${INVOCATION_ID}>" '<${INVOCATION_ID}>'
          <> <5d0149bfa2c34b79bccb13074001eb20>

تُوسع الوسيطة الأولى بواسطة الصدفة (علامات اقتباس مزدوجة)، لكن الثانية لا تُوسع بواسطة الصدفة (علامات اقتباس مفردة). يُستدعى echo(1) مع ["/usr/bin/echo", "<>", "<${INVOCATION_ID}>"] كمصفوفة وسائط، ثم يقوم systemd(1) بتوليد ${INVOCATION_ID} واستبداله في سطر الأوامر. لا يمكن إجراء هذا الاستبدال على جانب العميل، لأن المعرف الهدف الذي سيُعين للخدمة غير معروف قبل إجراء الاستدعاء.

مثال 7. توسيع المتغير وإعادة توجيه المخرجات باستخدام صدفة

يمكن تعطيل توسيع المتغيرات بواسطة systemd(1) باستخدام --expand-environment=no.

قد يكون تعطيل توسيع المتغيرات مفيدًا إذا كان الأمر المراد تنفيذه يحتوي على رموز الدولار وكان الهروب منها غير ملائم. على سبيل المثال، عند استخدام شِل:

    $ systemd-run --expand-environment=no -t bash \
          -c 'echo $SHELL $$ >/dev/stdout'
    /bin/bash 12345

يُمرر الوسيط الأخير حرفيًا إلى شِل bash(1) التي تُبدأ بوحدة الخدمة. توسع الشِل "$SHELL" إلى مسار الشِل، و"$$" إلى رقم عمليتها، ثم تُمرر هذه السلاسل إلى الأمر المدمج echo وتُطبع إلى المخرج المعياري (الموصل، في هذه الحالة، بالطرفية المستدعية).

مثال 8. قيمة الإرجاع

    $ systemd-run --user --wait true
    $ systemd-run --user --wait -p SuccessExitStatus=11 bash -c 'exit 11'
    $ systemd-run --user --wait -p SuccessExitStatus=SIGUSR1 --expand-environment=no \
          bash -c 'kill -SIGUSR1 $$'

ستنجح هذه الاستدعاءات الثلاثة، أي ستنتهي برمز خروج 0.

انظر أيضًا

systemd(1)، systemctl(1)، systemd.unit(5)، systemd.service(5)، systemd.scope(5)، systemd.slice(5)، systemd.exec(5)، systemd.resource-control(5)، systemd.timer(5)، systemd-mount(1)، machinectl(1)، run0(1)

ملاحظات

1.  رمز هروب ANSI (ويكيبيديا)
    https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.