table of contents
| SYSTEMD-RUN(1) | systemd-run | 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
أُضيف في الإصدارة 206.
--unit=, -u
أُضيف في الإصدارة 206.
--property=، -p
أُضيف في الإصدارة 211.
--description=
أُضيف في الإصدارة 206.
--slice=
أُضيف في الإصدارة 206.
--slice-inherit
مثال: افترض أن systemd-run اُستدعي في الشريحة foo.slice، ووسيطة --slice= هي bar. ستوضع الوحدة بعد ذلك تحت foo-bar.slice.
أُضيف في الإصدار 246.
--expand-environment=قيمة_منطقية
انظر systemd.service(5) لوصف توسيع المتغيرات. تعطيل توسيع المتغيرات مفيد إذا كان الأمر المحدد يتضمن أو قد يتضمن علامة "$".
أُضيف في الإصدار 254.
-r, --remain-after-exit
أُضيف في الإصدارة 207.
--send-sighup
أُضيف في الإصدارة 207.
--service-type=
أُضيف في الإصدارة 211.
--uid=, --gid=
أُضيف في الإصدارة 211.
--nice=
أُضيف في الإصدارة 211.
--working-directory=
أُضيف في الإصدار 240.
--same-dir, -d
أُضيف في الإصدار 240.
--root-directory=
لاحظ أن المسار يُبحث عنه داخل مساحة اسم نظام الملفات التي يعمل فيها systemd-run، والتي قد تختلف عن مساحة اسم نظام الملفات التي تعمل فيها عملية المدير. استخدم الخاصية RootDirectory= مباشرة إذا أردت البحث عن المسار في مساحة اسم نظام الملفات لعملية المدير.
أُضيف في الإصدار 259.
--same-root-dir, -R
أُضيف في الإصدار 259.
-E الاسم[=القيمة]، --setenv=الاسم[=القيمة]
انظر أيضًا Environment= في systemd.exec(5).
أُضيف في الإصدارة 211.
--pty, -t
سيؤدي هذا الخيار إلى انتظار systemd-run بشكل متزامن لإنهاء الخدمة المؤقتة، مشابهًا لتحديد --wait. إذا حُدد مع --wait، فلن يخرج systemd-run عند قطع الاتصال يدويًا من جهاز TTY الزائف.
لاحظ أن أمر shell في machinectl(1) هو عادة بديل أفضل لطلب جلسة ولوج تفاعلية جديدة على المضيف المحلي أو الحاوية المحلية.
انظر أدناه للتفاصيل حول كيفية دمج هذا المفتاح مع --pipe.
أُضيف في الإصدارة 219.
--pty-late, -T
أُضيف في الإصدار 258.
--pipe، -P
لاحظ أن هذا الوضع غير مناسب لصدفات الأوامر التفاعلية وما شابه، لأن عملية الخدمة لن تصبح متحكم 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
أُضيف في الإصدار 240.
--quiet، -q
أُضيف في الإصدارة 219.
-v، --verbose
أُضيف في الإصدار 258.
--on-active=, --on-boot=, --on-startup=, --on-unit-active=, --on-unit-inactive=
أُضيف في الإصدارة 218.
--on-calendar=
أُضيف في الإصدارة 218.
--on-clock-change, --on-timezone-change
أُضيف في الإصدارة 242.
--path-property=, --socket-property=, --timer-property=
أُضيف في الإصدارة 218.
--no-block
أُضيف في الإصدارة 220.
--wait
أُضيف في الإصدار 232.
-G، --collect
أُضيف في الإصدارة 236.
--job-mode=MODE
يأخذ الخيار نفس قيم الوضع مثل خيار --job-mode= في systemctl(1). وضع الوظيفة المبدئي هو "fail".
تشغيل --job-mode=help يعرض قائمة بأوضاع الوظائف المتاحة.
أُضيف في الإصدار 258.
--ignore-failure
أُضيف في الإصدار 256.
--background=COLOR
أُضيف في الإصدار 256.
--user
--system
-H، --host=
-M، --machine=
-C، --capsule=
أُضيف في الإصدار 256.
--no-ask-password
-h، --help
--version
--json=وضع
--no-pager
أُضيف في الإصدار 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 (ويكيبيديا)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| systemd 260.1 |