SYSTEMD-RUN(1) systemd-run SYSTEMD-RUN(1)

systemd-run - اجرای برنامه‌ها در واحدهای موقت scope، واحدهای service، یا واحدهای service راه‌اندازی‌شده با path، socket یا timer

systemd-run [OPTIONS...] COMMAND [ARGS...]

systemd-run [OPTIONS...] [PATH OPTIONS...] {COMMAND [ARGS...]}

systemd-run [OPTIONS...] [SOCKET OPTIONS...] {COMMAND [ARGS...]}

systemd-run [OPTIONS...] [TIMER OPTIONS...] {COMMAND [ARGS...]}

systemd-run می‌تواند برای ایجاد و راه‌اندازی یک واحد موقت .service یا .scope و اجرای COMMAND مشخص‌شده در آن استفاده شود. همچنین می‌تواند برای ایجاد و راه‌اندازی یک واحد موقت .path، .socket یا .timer استفاده شود که هنگام سپری شدن زمان یا وقوع رویداد، یک واحد .service را فعال می‌کند.

اگر دستوری به عنوان واحد سرویس موقت اجرا شود، مانند هر سرویس دیگری توسط مدیر سرویس راه‌اندازی و مدیریت خواهد شد و بنابراین مانند هر واحد دیگری در خروجی systemctl list-units نمایش داده می‌شود. این دستور در یک محیط اجرایی تمیز و تفکیک‌شده، با مدیر سرویس به عنوان فرآیند والد خود اجرا خواهد شد. در این حالت، systemd-run سرویس را به صورت ناهمگام در پس‌زمینه راه‌اندازی می‌کند و پس از اینکه دستور اجرای خود را آغاز کرد بازمی‌گردد (مگر اینکه --no-block، --wait، --pipe یا --pty مشخص شده باشند، زیر را ببینید).

اگر دستوری به عنوان واحد scope موقت اجرا شود، توسط خود systemd-run به عنوان فرآیند والد اجرا خواهد شد و بنابراین محیط اجرایی فراخواننده را به ارث می‌برد. با این حال، فرآیندهای دستور مانند سرویس‌های عادی توسط مدیر سرویس مدیریت می‌شوند و در خروجی systemctl list-units نمایش داده خواهند شد. اجرا در این حالت همگام است و تنها زمانی بازمی‌گردد که دستور به پایان برسد. این حالت از طریق سوئیچ --scope فعال می‌شود (زیر را ببینید).

اگر دستوری با گزینه‌های path، socket یا timer مانند --on-calendar= (زیر را ببینید) اجرا شود، یک واحد موقت path، socket یا timer در کنار واحد سرویس برای دستور مشخص‌شده ایجاد می‌شود. تنها واحد موقت path، socket یا timer بلافاصله راه‌اندازی می‌شود و واحد سرویس موقت توسط واحد path، socket یا timer برانگیخته (trigger) خواهد شد. اگر گزینه --unit= مشخص شده باشد، COMMAND می‌تواند حذف شود. در این حالت، systemd-run تنها یک واحد .path، .socket یا .timer ایجاد می‌کند که واحد مشخص‌شده را برمی‌انگیزد.

به طور پیش‌فرض، سرویس‌های ایجادشده با systemd-run دارای نوع پیش‌فرض simple هستند، برای جزئیات به توضیحات Type= در systemd.service(5) مراجعه کنید. توجه داشته باشید که در صورت استفاده از این نوع، مدیر سرویس (و بنابراین دستور systemd-run) راه‌اندازی سرویس را به محض موفقیت‌آمیز بودن fork() برای فرآیند اصلی سرویس، یعنی پیش از فراخوانی execve()، موفقیت‌آمیز تلقی می‌کند و در نتیجه حتی در صورتی که دستور مشخص‌شده نتواند راه‌اندازی شود نیز چنین در نظر می‌گیرد. استفاده از نوع سرویس exec (یعنی --property=Type=exec) را در نظر داشته باشید تا اطمینان حاصل شود که systemd-run تنها در صورتی با موفقیت بازمی‌گردد که خط فرمان مشخص‌شده با موفقیت راه‌اندازی شده باشد.

پس از اینکه systemd-run دستور را به مدیر سرویس تحویل می‌دهد، مدیر گسترش متغیرها (variable expansion) را انجام می‌دهد. این بدان معناست که نویسه‌های دلار ("$") که نباید گسترش یابند باید به صورت "$$" گریز (escape) داده شوند. گسترش را می‌توان با استفاده از --expand-environment=no نیز غیرفعال کرد.

گزینه‌های زیر پشتیبانی می‌شوند:

--scope

ایجاد یک واحد موقت .scope به جای واحد موقت پیش‌فرض .service (بالا را ببینید).

افزوده‌شده در نسخه 206.

--unit=, -u

استفاده از این نام واحد به جای نام تولیدشده خودکار.

افزوده‌شده در نسخه 206.

--property=, -p

تنظیم یک ویژگی بر روی واحد scope یا سرویس ایجادشده. این گزینه یک انتساب را با همان قالبی که دستور set-property از systemctl(1) می‌پذیرد، دریافت می‌کند.

افزوده‌شده در نسخه 211.

--description=

ارائه توضیحی برای واحد سرویس، scope، path، socket یا timer. در صورت مشخص نشدن، از خود دستور به عنوان توضیح استفاده خواهد شد. Description= در systemd.unit(5) را ببینید.

افزوده‌شده در نسخه 206.

--slice=

قرار دادن واحد جدید .service یا .scope به عنوان بخشی از برش (slice) مشخص‌شده، به جای 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=BOOL

گسترش متغیرهای محیطی در آرگومان‌های دستور. در صورت فعال بودن (پیش‌فرض)، متغیرهای محیطی مشخص‌شده به صورت "${VARIABLE}" به همان شیوه‌ای گسترش می‌یابند که در دستورات مشخص‌شده از طریق ExecStart= در واحدها گسترش می‌یابند. با --scope، این گسترش توسط خود systemd-run انجام می‌شود، و در موارد دیگر توسط مدیر سرویسی که دستور را ایجاد می‌کند انجام می‌گیرد. توجه داشته باشید که این مشابه، اما نه کاملاً یکسان با گسترش متغیرها در bash(1) و سایر پوسته‌ها است.

برای توضیحات مربوط به گسترش متغیرها به systemd.service(5) مراجعه کنید. غیرفعال کردن گسترش متغیرها زمانی مفید است که دستور مشخص‌شده شامل یا احتمالاً شامل علامت "$" باشد.

افزوده‌شده در نسخه 254.

-r, --remain-after-exit

پس از خاتمه فرآیند سرویس، سرویس را تا زمانی که صریحاً متوقف شود نگه می‌دارد. این ویژگی برای جمع‌آوری اطلاعات زمان اجرا درباره سرویس پس از پایان اجرای آن مفید است. همچنین RemainAfterExit= در systemd.service(5) را ببینید. این گزینه ممکن است با --wait، --scope، --pty، --pty-late یا --pipe ترکیب نشود.

افزوده‌شده در نسخه 207.

--send-sighup

هنگام خاتمه دادن به واحد scope یا سرویس، بلافاصله پس از SIGTERM یک SIGHUP ارسال می‌کند. این برای نشان دادن قطع شدن ارتباط به پوسته‌ها و فرآیندهای شبه‌پوسته مفید است. همچنین SendSIGHUP= در systemd.kill(5) را ببینید.

افزوده‌شده در نسخه 207.

--service-type=

نوع سرویس را تنظیم می‌کند. همچنین Type= در systemd.service(5) را ببینید. این گزینه در ارتباط با --scope هیچ اثری ندارد. پیش‌فرض simple است.

افزوده‌شده در نسخه 211.

--uid=, --gid=

فرآیند سرویس را تحت کاربر و گروه یونیکس مشخص‌شده اجرا می‌کند. همچنین 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 NAME[=VALUE], --setenv=NAME[=VALUE]

فرآیند سرویس را با تنظیم متغیر محیطی مشخص‌شده اجرا می‌کند. این پارامتر ممکن است بیش از یک بار برای تنظیم چندین متغیر استفاده شود. هنگامی که "=" و VALUE حذف شوند، از مقدار متغیر با همان نام در محیط برنامه استفاده خواهد شد.

همچنین Environment= در systemd.exec(5) را ببینید.

افزوده‌شده در نسخه 211.

--pty, -t

هنگام فراخوانی دستور، سرویس موقت ورودی، خروجی و خطای استاندارد خود را از طریق یک دستگاه شبه TTY به ترمینالی که systemd-run در آن فراخوانی شده است متصل می‌کند. این امکان اجرای برنامه‌هایی را که انتظار ورودی/خروجی تعاملی کاربر را دارند به صورت سرویس فراهم می‌سازد، مانند پوسته‌های تعاملی خط فرمان.

این گزینه منجر به این می‌شود که 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 امکان می‌دهد در خطوط لوله (pipelines) پوسته استفاده شود.

توجه داشته باشید که این حالت برای پوسته‌های تعاملی خط فرمان و موارد مشابه مناسب نیست، زیرا فرآیند سرویس هنگام فراخوانی در یک ترمینال به کنترل‌کننده 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=

یک تایمر یکنواخت (monotonic timer) را نسبت به نقاط شروع مختلف برای راه‌اندازی دستور مشخص‌شده تعریف می‌کند. برای جزئیات 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

یک محرک (trigger) را بر اساس جهش‌های ساعت سیستم یا تغییرات منطقه زمانی برای راه‌اندازی دستور مشخص‌شده تعریف می‌کند. OnClockChange= و OnTimezoneChange= در systemd.timer(5) را ببینید. این گزینه‌ها میانبرهایی برای --timer-property=OnClockChange=yes و --timer-property=OnTimezoneChange=yes هستند. این گزینه‌ها ممکن است با --scope یا --pty ترکیب نشوند.

افزوده‌شده در نسخه 242.

--path-property=, --socket-property=, --timer-property=

یک ویژگی را بر روی واحد path، socket یا timer ایجادشده تنظیم می‌کند. این گزینه مشابه --property= است، اما به جای واحد سرویس موقت ایجادشده، بر روی واحد موقت path، socket یا timer اعمال می‌شود. این گزینه یک انتساب را با همان قالبی که دستور set-property از systemctl(1) می‌پذیرد، دریافت می‌کند. این گزینه‌ها ممکن است با --scope یا --pty ترکیب نشوند.

افزوده‌شده در نسخه 218.

--no-block

به صورت همگام منتظر اتمام عملیات راه‌اندازی واحد نمی‌ماند. اگر این گزینه مشخص نشود، درخواست راه‌اندازی برای واحد موقت بررسی و در صف قرار داده می‌شود و systemd-run تا زمان تکمیل راه‌اندازی واحد منتظر خواهد ماند. با ارسال این آرگومان، درخواست تنها بررسی و در صف قرار داده می‌شود. این گزینه ممکن است با --wait یا --scope ترکیب نشود.

افزوده‌شده در نسخه 220.

--wait

به صورت همگام منتظر خاتمه یافتن سرویس موقت می‌ماند. اگر این گزینه مشخص شود، درخواست راه‌اندازی برای واحد موقت بررسی، در صف قرار داده شده، و منتظر آن می‌ماند. متعاقباً واحد فراخوانی‌شده نظارت می‌شود و تا زمانی که مجدداً غیرفعال شود (به احتمال زیاد به این دلیل که دستور مشخص‌شده تکمیل شده است) انتظار کشیده می‌شود. هنگام خروج، اطلاعات مختصری درباره زمان اجرای واحد نمایش داده می‌شود، شامل کل زمان اجرا (و همچنین داده‌های حسابداری CPU، حافظه، IO و IP در صورتی که تنظیمات مربوط به حسابداری cgroup فعال باشند) و کد خروج و وضعیت فرآیند اصلی. این خروجی می‌تواند با --quiet سرکوب شود. این گزینه ممکن است با --no-block، --remain-after-exit، --scope یا گزینه‌های مختلف path، socket یا timer ترکیب نشود.

افزوده‌شده در نسخه 232.

-G, --collect

تخلیه واحد موقت از حافظه پس از تکمیل آن، حتی اگر با شکست مواجه شده باشد. به طور معمول، بدون این گزینه، تمام واحدهایی که اجرا شده و با شکست مواجه شده‌اند در حافظه نگه‌داری می‌شوند تا زمانی که کاربر صریحاً وضعیت شکست آن‌ها را با systemctl reset-failed یا یک دستور معادل بازنشانی کند. از سوی دیگر، واحدهایی که با موفقیت اجرا شده‌اند بلافاصله از حافظه تخلیه می‌شوند. اگر این گزینه فعال شود، «جمع‌آوری زباله» (garbage collection) واحدها تهاجمی‌تر انجام می‌شود و واحدها فارغ از اینکه با موفقیت خارج شده باشند یا با شکست مواجه شده باشند، از حافظه تخلیه می‌گردند. این گزینه میانبری برای --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= در بالا را ببینید) و این موضوع در لاگ‌ها گزارش می‌شود. اگر این سوئیچ مشخص شود، این گزارش‌دهی سرکوب می‌شود و هر وضعیت/کد خروج غیرموفقیت‌آمیز دستور به عنوان موفقیت در نظر گرفته خواهد شد. این گزینه در حالت --scope پشتیبانی نمی‌شود.

افزوده‌شده در نسخه 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 HOST شمارش شوند. آدرس‌های IPv6 را در قلاب‌ها (brackets) قرار دهید.

-M, --machine=

عملیات را روی یک کانتینر محلی اجرا می‌کند. نام کانتینر را برای اتصال مشخص کنید، که می‌تواند به صورت اختیاری با یک نام کاربری برای اتصال و نویسه جداکننده "@" پیشوندگذاری شود. اگر رشته ویژه ".host" به جای نام کانتینر استفاده شود، اتصالی به سیستم محلی برقرار می‌شود (که برای اتصال به گذرگاه کاربری یک کاربر خاص مفید است: "--user --machine=lennart@.host"). اگر نحو "@" استفاده نشود، اتصال به عنوان کاربر root برقرار می‌شود. اگر نحو "@" استفاده شود، سمت چپ یا سمت راست ممکن است حذف شود (اما نه هر دو) که در این صورت نام کاربر محلی و ".host" ضمنی هستند.

-C, --capsule=

عملیات را روی یک کپسول (capsule) اجرا می‌کند. یک نام کپسول را برای اتصال مشخص کنید. برای جزئیات درباره کپسول‌ها به capsule@.service(5) مراجعه کنید.

افزوده‌شده در نسخه 256.

--no-ask-password

از کاربر برای احراز هویت در عملیات‌های دارای اختیارات بالا درخواست گذرواژه نمی‌کند.

-h, --help

یک متن راهنمای کوتاه را چاپ کرده و خارج می‌شود.

--version

یک رشته نسخه کوتاه را چاپ کرده و خارج می‌شود.

--json=MODE

خروجی را در قالب JSON نمایش می‌دهد. یکی از مقادیر "short" (برای کوتاه‌ترین خروجی ممکن بدون هیچ‌گونه فاصله خالی یا شکست خط اضافی)، "pretty" (برای نسخه‌ای زیبا از همان، همراه با تورفتگی و شکست خط) یا "off" (برای خاموش کردن خروجی JSON، پیش‌فرض) را می‌پذیرد.

--no-pager

خروجی را به یک صفحه‌بند (pager) منتقل نمی‌کند. این در حال حاضر تنها برای --help اعمال می‌شود. (صفحه‌بند در طول عملکرد عادی راه‌اندازی نمی‌شود.)

افزوده‌شده در نسخه 258.

--json= نباید با --scope، --pty، --pty-late، --pipe، --verbose، یا گزینه‌های path، socket یا timer ترکیب شود.

تمام آرگومان‌های خط فرمان پس از نخستین آرگومان غیرگزینه‌ای، بخشی از خط فرمان فرآیند راه‌اندازی‌شده می‌شوند.

در صورت موفقیت، 0 بازگردانده می‌شود. اگر systemd-run در راه‌اندازی سرویس ناموفق باشد، یک مقدار بازگشتی غیرصفر برگردانده خواهد شد. اگر systemd-run منتظر خاتمه سرویس بماند، مقدار بازگشتی از سرویس منتقل خواهد شد. در صورت موفقیت 0 بازگردانده می‌شود، از جمله در تمامی مواردی که سیستم‌دی خروج سرویس را تمیز در نظر می‌گیرد؛ بررسی SuccessExitStatus= در systemd.service(5) را ببینید.

مثال ۱. لاگ کردن متغیرهای محیطی ارائه‌شده توسط 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

مثال ۲. محدود کردن منابع در دسترس یک دستور

# systemd-run -p IOWeight=10 updatedb

این دستور ابزار updatedb(8) را فراخوانی می‌کند، اما وزن I/O بلوکی را برای آن به 10 کاهش می‌دهد. برای اطلاعات بیشتر درباره ویژگی IOWeight= به systemd.resource-control(5) مراجعه کنید.

مثال ۳. اجرای دستورات در زمانی مشخص

دستور زیر یک فایل را پس از ۳۰ ثانیه لمس (touch) می‌کند.

# 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.

مثال ۴. اجازه دسترسی به tty

دستور زیر bash(1) را به عنوان یک سرویس فراخوانی می‌کند و ورودی، خروجی و خطای استاندارد آن را به TTY فراخواننده منتقل می‌نماید.

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

مثال ۵. راه‌اندازی 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 راه‌اندازی شده است، در یک واحد scope شروع می‌کند. یک واحد systemd.scope(5) به جای واحد systemd.service(5) استفاده می‌شود، زیرا screen هنگام جدا شدن از ترمینال خارج می‌شود و یک واحد سرویس در این صورت خاتمه می‌یافت. اجرای screen به عنوان یک واحد کاربری این مزیت را دارد که بخشی از اسکوپ نشست (session scope) نیست. اگر KillUserProcesses=yes در logind.conf(5) پیکربندی شده باشد (پیش‌فرض "no" است)، با خروج کاربر از آن نشست، اسکوپ نشست خاتمه خواهد یافت.

واحد user@.service هنگامی که کاربر برای نخستین بار وارد سیستم می‌شود به طور خودکار راه‌اندازی می‌شود، و تا زمانی که دست‌کم یک نشست ورود باز باشد فعال می‌ماند. پس از خروج کاربر از آخرین نشست، user@.service و تمامی سرویس‌های زیرمجموعه آن خاتمه می‌یابند. این رفتار در صورتی که «ماندگاری» (lingering) برای آن کاربر فعال نشده باشد پیش‌فرض است. فعال کردن ماندگاری به این معنی است که user@.service در حین بوت به طور خودکار راه‌اندازی می‌شود، حتی اگر کاربر وارد سیستم نشده باشد، و با خروج کاربر از سیستم، سرویس خاتمه نمی‌یابد.

فعال کردن ماندگاری به کاربر اجازه می‌دهد فرآیندها را بدون وارد شدن به سیستم اجرا کند، برای مثال به منظور اجازه دادن به screen برای تداوم پس از خروج کاربر از سیستم، حتی اگر اسکوپ نشست خاتمه یابد. در پیکربندی پیش‌فرض، کاربران می‌توانند ماندگاری را برای خود فعال کنند:

$ loginctl enable-linger

مثال ۶. گسترش متغیرها توسط مدیر

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

آرگومان نخست توسط پوسته گسترش می‌یابد (نقل‌قول‌های دوتایی)، اما آرگومان دوم توسط پوسته گسترش نمی‌یابد (نقل‌قول‌های تکی). echo(1) با آرایه آرگومان ["/usr/bin/echo", "<>", "<${INVOCATION_ID}>"] فراخوانی می‌شود، و سپس systemd(1) متغیر ${INVOCATION_ID} را تولید کرده و آن را در خط فرمان جایگزین می‌کند. این جایگزینی نمی‌توانست در سمت کلاینت انجام شود، زیرا شناسه هدفی که برای سرویس تنظیم خواهد شد پیش از برقراری تماس مشخص نیست.

مثال ۷. گسترش متغیرها و تغییر مسیر خروجی با استفاده از یک پوسته

گسترش متغیرها توسط systemd(1) می‌تواند با --expand-environment=no غیرفعال شود.

غیرفعال کردن گسترش متغیرها می‌تواند زمانی مفید باشد که دستور مورد نظر برای اجرا حاوی نویسه‌های دلار است و گریز (escape) دادن آن‌ها نامناسب یا دشوار باشد. به عنوان مثال، هنگامی که از یک پوسته استفاده می‌شود:

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

آرگومان آخر عیناً به پوسته bash(1) که توسط واحد سرویس راه‌اندازی شده است منتقل می‌شود. پوسته "$SHELL" را به مسیر پوسته، و "$$" را به شماره فرآیند خود گسترش می‌دهد، و سپس آن رشته‌ها به دستور توکار echo منتقل شده و در خروجی استاندارد چاپ می‌شوند (که در این مورد، به ترمینال فراخواننده متصل است).

مثال ۸. مقدار بازگشتی

$ 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 (ویکی‌پدیا)
systemd 261.2