SYSTEMD.UNIT(5) systemd.unit SYSTEMD.UNIT(5)

systemd.unit - پیکربندی عمومی و تنظیمات مشترک واحدهای systemd

service.service, socket.socket, device.device, mount.mount, automount.automount, swap.swap, target.target, path.path, timer.timer, slice.slice, scope.scope

/etc/systemd/system.control/*
/run/systemd/system.control/*
/run/systemd/transient/*
/run/systemd/generator.early/*
/etc/systemd/system/*
/etc/systemd/system.attached/*
/run/systemd/system/*
/run/systemd/system.attached/*
/run/systemd/generator/*
...
/usr/local/lib/systemd/system/*
/usr/lib/systemd/system/*
/run/systemd/generator.late/*

~/.config/systemd/user.control/*
$XDG_RUNTIME_DIR/systemd/user.control/*
$XDG_RUNTIME_DIR/systemd/transient/*
$XDG_RUNTIME_DIR/systemd/generator.early/*
~/.config/systemd/user/*
$XDG_CONFIG_DIRS/systemd/user/*
/etc/systemd/user/*
$XDG_RUNTIME_DIR/systemd/user/*
/run/systemd/user/*
$XDG_RUNTIME_DIR/systemd/generator/*
$XDG_DATA_HOME/systemd/user/*
$XDG_DATA_DIRS/systemd/user/*
...
/usr/local/lib/systemd/user/*
/usr/lib/systemd/user/*
$XDG_RUNTIME_DIR/systemd/generator.late/*

یک فایل واحد، یک فایل متنی ساده به سبک ini است که اطلاعات مربوط به یک سرویس، سوکت، دستگاه، نقطه اتصال (mount point)، نقطه اتصال خودکار (automount point)، فایل یا پارتیشن swap، هدف راه‌اندازی (target)، مسیر فایل‌سیستم تحت نظارت، تایمر کنترل و نظارت‌شده توسط systemd(1)، یک برش مدیریت منابع (slice) یا گروهی از فرآیندهای ایجادشده به صورت خارجی را کدگذاری می‌کند. برای توضیحات کلی درباره نحو، systemd.syntax(7) را ببینید.

این صفحه راهنما، گزینه‌های پیکربندی مشترک تمام انواع واحد را فهرست می‌کند. این گزینه‌ها باید در بخش‌های [Unit] یا [Install] فایل‌های واحد پیکربندی شوند.

علاوه بر بخش‌های عمومی [Unit] و [Install] که در اینجا توضیح داده شده‌اند، هر واحد ممکن است دارای یک بخش ویژه نوع خود باشد، مانند [Service] برای یک واحد سرویس. برای اطلاعات بیشتر صفحات راهنمای مربوطه را ببینید: systemd.service(5)، systemd.socket(5)، systemd.device(5)، systemd.mount(5)، systemd.automount(5)، systemd.swap(5)، systemd.target(5)، systemd.path(5)، systemd.timer(5)، systemd.slice(5)، systemd.scope(5).

فایل‌های واحد از مجموعه‌ای از مسیرها که در زمان کامپایل تعیین شده‌اند بارگذاری می‌شوند که در بخش بعدی توضیح داده شده است.

نام‌های معتبر واحد از یک «پیشوند نام واحد» و یک پسوند که نوع واحد را مشخص می‌کند و با یک نقطه شروع می‌شود، تشکیل شده‌اند. «پیشوند نام واحد» باید از یک یا چند نویسه معتبر (حروف اسکی، ارقام، ":"، "-"، "_"، "." و "\") تشکیل شود. طول کل نام واحد شامل پسوند نباید از ۲۵۵ نویسه تجاوز کند. پسوند نوع واحد باید یکی از موارد زیر باشد: ".service"، ".socket"، ".device"، ".mount"، ".automount"، ".swap"، ".target"، ".path"، ".timer"، ".slice" یا ".scope".

نام‌های واحد را می‌توان با یک آرگومان واحد به نام «نام نمونه» (instance name) پارامتری کرد. سپس واحد بر اساس یک «فایل الگو» (template file) ساخته می‌شود که به عنوان تعریف چندین سرویس یا واحدهای دیگر عمل می‌کند. یک واحد الگو باید یک علامت "@" منفرد در انتهای پیشوند نام واحد (دقیقاً قبل از پسوند نوع) داشته باشد. نام واحد کامل با درج نام نمونه بین "@" و پسوند نوع واحد تشکیل می‌شود. در خود فایل واحد، می‌توان با استفاده از "%i" و سایر مشخص‌کننده‌ها به پارامتر نمونه ارجاع داد، به زیر مراجعه کنید.

فایل‌های واحد ممکن است شامل گزینه‌های اضافی علاوه بر مواردی که در اینجا فهرست شده‌اند باشند. اگر systemd با یک گزینه ناشناخته مواجه شود، یک پیام هشدار در گزارش ثبت می‌کند اما به بارگذاری واحد ادامه می‌دهد. اگر نام یک گزینه یا بخش با پیشوند X- آغاز شود، توسط systemd کاملاً نادیده گرفته می‌شود. گزینه‌های درون یک بخش نادیده‌گرفته‌شده نیازی به پیشوند ندارند. برنامه‌ها ممکن است از این قابلیت برای گنجاندن اطلاعات اضافی در فایل‌های واحد استفاده کنند. برای دسترسی به این گزینه‌ها، برنامه‌ها باید فایل‌های واحد را خودشان تجزیه کنند.

واحدها را می‌توان با ایجاد یک پیوند نمادین (symlink) از نام جدید به نام موجود در یکی از مسیرهای جستجوی واحد، نام مستعار داد (یک نام جایگزین برای آن‌ها تعیین کرد). به عنوان مثال، systemd-networkd.service نام مستعار dbus-org.freedesktop.network1.service را دارد که در طول نصب به عنوان یک پیوند نمادین ایجاد شده است، بنابراین هنگامی که از systemd از طریق D-Bus خواسته می‌شود که dbus-org.freedesktop.network1.service را بارگذاری کند، systemd-networkd.service را بارگذاری خواهد کرد. به عنوان مثالی دیگر، default.target — هدف پیش‌فرض سیستم که هنگام راه‌اندازی اجرا می‌شود — معمولاً به multi-user.target یا graphical.target پیوند نمادین داده می‌شود تا مشخص کند چه چیزی به طور پیش‌فرض راه‌اندازی شود. نام‌های مستعار را می‌توان در دستوراتی مانند disable، start، stop، status و موارد مشابه، و در تمام دستورالعمل‌های وابستگی واحد، از جمله Wants=، Requires=، Before=، After= استفاده کرد. نام‌های مستعار را نمی‌توان با دستور preset استفاده کرد.

نام‌های مستعار از محدودیت‌های زیر پیروی می‌کنند: یک واحد از نوع خاص (".service"، ".socket"، ...) فقط می‌تواند با نامی دارای همان پسوند نوع نام مستعار داده شود. یک واحد ساده (غیر الگو یا نمونه)، فقط با یک نام ساده می‌تواند نام مستعار بگیرد. یک نمونه الگو فقط می‌تواند با یک نمونه الگوی دیگر نام مستعار داده شود و بخش نمونه باید یکسان باشد. یک الگو ممکن است توسط یک الگوی دیگر نام مستعار بگیرد (در این حالت نام مستعار برای همه نمونه‌های الگو اعمال می‌شود). به عنوان یک حالت خاص، یک نمونه الگو (مانند "alias@inst.service") ممکن است یک پیوند نمادین به الگوی متفاوتی (مانند "template@inst.service") باشد. در این حالت، فقط همین نمونه خاص دارای نام مستعار می‌شود، در حالی که سایر نمونه‌های الگو (مانند "alias@foo.service"، "alias@bar.service") نام مستعار نخواهند داشت. این قوانین این الزام را حفظ می‌کنند که نمونه (در صورت وجود) همیشه برای یک واحد معین و تمام نام‌های مستعار آن به طور منحصر به فرد تعریف شده باشد. مقصد پیوند نمادین نام مستعار باید به یک مکان معتبر فایل واحد اشاره کند، یعنی نام مقصد پیوند نمادین باید همان‌طور که توضیح داده شد با نام منبع پیوند نمادین مطابقت داشته باشد، و مسیر مقصد باید در یکی از مسیرهای جستجوی واحد باشد، برای جزئیات بیشتر به بخش مسیر بارگذاری فایل واحد در زیر مراجعه کنید. توجه داشته باشید که فایل مقصد ممکن است وجود نداشته باشد، یعنی پیوند نمادین ممکن است معلق (dangling) باشد.

فایل‌های واحد ممکن است نام‌های مستعار را از طریق دستورالعمل Alias= در بخش [Install] مشخص کنند. هنگامی که واحد فعال (enable) می‌شود، پیوندهای نمادین برای آن نام‌ها ایجاد می‌شوند و هنگام غیرفعال (disable) شدن واحد حذف می‌گردند. به عنوان مثال، reboot.target دستورالعمل Alias=ctrl-alt-del.target را مشخص می‌کند، بنابراین در صورت فعال بودن، پیوند نمادین /etc/systemd/system/ctrl-alt-del.target که به فایل reboot.target اشاره می‌کند ایجاد خواهد شد، و هنگامی که Ctrl+Alt+Del فشرده شود، systemd به دنبال ctrl-alt-del.target می‌گردد، پیوند نمادین را تا reboot.target دنبال می‌کند و reboot.service را به عنوان بخشی از آن هدف اجرا می‌نماید. systemd در طول عملکرد عادی اصلاً به بخش [Install] نگاه نمی‌کند، بنابراین هر دستورالعملی در آن بخش فقط از طریق پیوندهای نمادین ایجادشده در زمان فعال‌سازی تأثیر می‌گذارد.

در کنار یک فایل واحد foo.service، دایرکتوری foo.service.wants/ ممکن است وجود داشته باشد. تمام فایل‌های واحدی که از چنین دایرکتوری پیوند نمادین شده‌اند، به طور ضمنی به عنوان وابستگی‌هایی از نوع Wants= به واحد اضافه می‌شوند. قابلیت مشابهی برای وابستگی‌های نوع Requires= نیز وجود دارد که در این حالت پسوند دایرکتوری .requires/ است. این قابلیت برای قلاب کردن واحدها به فرآیند راه‌اندازی سایر واحدها بدون نیاز به تغییر فایل‌های واحد آن‌ها مفید است. برای جزئیات بیشتر درباره معنای Wants= و Requires=، به زیر مراجعه کنید. روش ترجیحی برای ایجاد پیوندهای نمادین در دایرکتوری‌های .wants/ یا .requires/ مشخص کردن وابستگی در بخش [Install] واحد مقصد و ایجاد پیوند نمادین در سیستم فایل با دستورات enable یا preset از systemctl(1) است. مقصد می‌تواند یک واحد معمولی باشد (چه ساده یا یک نمونه خاص از یک واحد الگو). در حالتی که واحد مبدأ یک الگو باشد، مقصد نیز می‌تواند یک الگو باشد که در این حالت نمونه به واحد مقصد «منتشر» می‌شود تا یک نمونه واحد معتبر تشکیل دهد. مقصد پیوندهای نمادین در .wants/ یا .requires/ باید به یک مکان معتبر فایل واحد اشاره کند، یعنی نام مقصد پیوند نمادین باید شرایط توصیف‌شده را برآورده سازد و مسیر مقصد باید در یکی از مسیرهای جستجوی واحد باشد، برای جزئیات بیشتر به بخش مسیر بارگذاری فایل واحد در زیر مراجعه کنید. توجه داشته باشید که فایل مقصد ممکن است وجود نداشته باشد، یعنی پیوند نمادین ممکن است معلق باشد.

در کنار یک فایل واحد foo.service، یک دایرکتوری بازنویسی قطعه‌ای (drop-in) به نام foo.service.d/ ممکن است وجود داشته باشد. تمام فایل‌های دارای پسوند ".conf" از این دایرکتوری به ترتیب الفبایی-عددی ادغام شده و پس از تجزیه خود فایل اصلی واحد، تجزیه و اعمال می‌شوند. این قابلیت برای تغییر یا افزودن تنظیمات پیکربندی برای یک واحد، بدون نیاز به ویرایش فایل اصلی واحد مفید است. هر فایل drop-in باید سرآیندهای بخش مناسب را داشته باشد. برای واحدهای نمونه‌سازی‌شده، این منطق ابتدا به دنبال زیردایرکتوری ".d/" نمونه (مانند "foo@bar.service.d/") می‌گردد و فایل‌های ".conf" آن را می‌خواند، و سپس زیردایرکتوری ".d/" الگو (مانند "foo@.service.d/") و فایل‌های ".conf" موجود در آن را بررسی می‌کند. علاوه بر این، برای نام‌های واحد حاوی خط تیره ("-")، مجموعه دایرکتوری‌های تولیدشده از کوتاه‌سازی مکرر نام واحد پس از خط تیره‌ها نیز جستجو می‌شود. به طور خاص، برای نام واحد foo-bar-baz.service نه تنها دایرکتوری drop-in معمولی foo-bar-baz.service.d/ جستجو می‌شود، بلکه هر دو دایرکتوری foo-bar-.service.d/ و foo-.service.d/ نیز جستجو می‌شوند. این برای تعریف فایل‌های قطعه‌ای مشترک برای مجموعه‌ای از واحدهای مرتبط که نام آن‌ها با یک پیشوند مشترک آغاز می‌شود مفید است. این طرح به ویژه برای واحدهای mount، automount و slice که ساختار نام‌گذاری سیستماتیک آن‌ها بر اساس خط تیره به عنوان جداکننده اجزا ساخته شده، بسیار کارآمد است. توجه داشته باشید که فایل‌های drop-in با نام‌های یکسان در رده‌های پایین‌تر سلسله‌مراتب پیشوند، مواردی را که بالاتر قرار دارند لغو و بازنویسی می‌کنند؛ یعنی foo-bar-.service.d/10-override.conf بر فایل foo-.service.d/10-override.conf اولویت دارد و آن را بازنویسی می‌کند.

در موارد نام‌های مستعار واحد (توضیح داده شده در بالا)، قطعه‌های drop-in برای نام مستعار و تمام نام‌های مستعار دیگر بارگذاری می‌شوند. در مثال default.target که نام مستعار graphical.target است، دایرکتوری‌های default.target.d/، default.target.wants/، default.target.requires/، graphical.target.d/، graphical.target.wants/، graphical.target.requires/ همگی خوانده می‌شوند. برای الگوها، فایل‌های drop-in برای الگو، هرگونه نام مستعار الگو، نمونه الگو و تمام نمونه‌های نام مستعار خوانده می‌شوند. هنگامی که فقط یک نمونه الگوی خاص نام مستعار دارد، فایل‌های drop-in برای الگوی مقصد، نمونه الگوی مقصد و نمونه الگوی نام مستعار خوانده می‌شوند.

علاوه بر /etc/systemd/system، دایرکتوری‌های قطعه‌ای ".d/" برای سرویس‌های سیستمی را می‌توان در دایرکتوری‌های /usr/lib/systemd/system یا /run/systemd/system نیز قرار داد. فایل‌های drop-in در /etc/ بر فایل‌های موجود در /run/ اولویت دارند که آن‌ها نیز به نوبه خود بر فایل‌های موجود در /usr/lib/ اولویت دارند. فایل‌های drop-in در هر یک از این دایرکتوری‌ها بر فایل‌های واحد در هر کجا که قرار داشته باشند اولویت دارند. چندین فایل drop-in با نام‌های مختلف بدون توجه به اینکه در کدام دایرکتوری قرار دارند، به ترتیب لغت‌نگاری اعمال می‌شوند.

واحدها همچنین از یک دایرکتوری قطعه‌ای سطح بالا با عنوان type.d/ پشتیبانی می‌کنند، که در آن type می‌تواند مثلاً "service" یا "socket" باشد، که امکان تغییر یا افزودن به تنظیمات تمام فایل‌های واحد متناظر در سیستم را فراهم می‌سازد. قالب‌بندی و اولویت اعمال پیکربندی‌های drop-in از آنچه در بالا تعریف شد پیروی می‌کند. فایل‌های موجود در type.d/ نسبت به فایل‌های موجود در دایرکتوری‌های بازنویسی اختصاصی نام، اولویت کمتری دارند. قوانین معمول اعمال می‌شوند: چندین فایل drop-in با نام‌های مختلف بدون توجه به اینکه در کدام دایرکتوری قرار دارند، به ترتیب لغت‌نگاری اعمال می‌شوند، بنابراین یک فایل در type.d/ تنها در صورتی برای یک واحد اعمال می‌شود که هیچ drop-in یا پوششی (mask) با آن نام در دایرکتوری‌های دارای اولویت بالاتر وجود نداشته باشد. بخش مثال‌ها را ببینید.

توجه داشته باشید که اگرچه systemd یک سیستم وابستگی انعطاف‌پذیر بین واحدها ارائه می‌دهد، توصیه می‌شود از این قابلیت صرفاً به صورت محدود استفاده کنید و در عوض به تکنیک‌هایی مانند فعال‌سازی مبتنی بر گذرگاه (bus) یا سوکت تکیه نمایید که وابستگی‌ها را ضمنی کرده و منجر به سیستمی ساده‌تر و انعطاف‌پذیرتر می‌شوند.

همان‌طور که در بالا ذکر شد، یک واحد ممکن است از یک فایل الگو نمونه‌سازی شود. این امر امکان ایجاد چندین واحد از یک فایل پیکربندی واحد را فراهم می‌آورد. اگر systemd به دنبال یک فایل پیکربندی واحد بگردد، ابتدا نام دقیق واحد را در سیستم فایل جستجو می‌کند. اگر موفقیتی حاصل نشد و نام واحد حاوی نویسه "@" باشد، systemd به دنبال یک الگوی واحد خواهد گشت که نام مشابهی دارد اما رشته نمونه (یعنی بخش بین نویسه "@" و پسوند) از آن حذف شده است. مثال: اگر سرویس getty@tty3.service درخواست شود و فایلی با آن نام یافت نشود، systemd به دنبال getty@.service می‌گردد و در صورت یافت شدن، یک سرویس را از آن فایل پیکربندی نمونه‌سازی می‌کند.

برای ارجاع به رشته نمونه از درون فایل پیکربندی می‌توانید از مشخص‌کننده ویژه "%i" در بسیاری از گزینه‌های پیکربندی استفاده کنید. برای جزئیات به زیر مراجعه نمایید.

اگر یک فایل واحد خالی باشد (یعنی اندازه فایل ۰ باشد) یا به /dev/null پیوند نمادین شده باشد، پیکربندی آن بارگذاری نخواهد شد و با وضعیت بارگذاری "masked" (ماسک‌شده) ظاهر می‌شود و نمی‌توان آن را فعال کرد. از این ویژگی به عنوان روشی مؤثر برای غیرفعال‌سازی کامل یک واحد استفاده کنید که شروع آن را حتی به صورت دستی غیرممکن می‌سازد.

قالب فایل واحد تحت پوشش تعهد پایداری و قابلیت حمل رابط (Interface Portability and Stability Promise)[1] قرار دارد.

گاهی اوقات تبدیل رشته‌های دلخواه به نام‌های واحد مفید است. برای تسهیل این امر، روشی برای گریز رشته‌ها (string escaping) استفاده می‌شود تا رشته‌های حاوی مقادیر بایتی دلخواه (به جز NUL) به نام‌های واحد معتبر با مجموعه نویسه‌های محدود آن‌ها نگاشت شوند. یک حالت خاص رایج، نام‌های واحدی هستند که مسیرهای اشیاء در سلسله‌مراتب سیستم فایل را بازتاب می‌دهند. مثال: یک واحد دستگاه dev-sda.device به دستگاهی با گره دستگاه /dev/sda در سیستم فایل اشاره دارد.

الگوریتم گریز به صورت زیر عمل می‌کند: با داشتن یک رشته، هر نویسه "/" با "-" جایگزین می‌شود، و سایر نویسه‌هایی که الفبایی-عددی اسکی، ":"، "_" یا "." نیستند با کدهای گریز به سبک C مانند "\x2d" جایگزین می‌شوند. علاوه بر این، "." زمانی که به عنوان اولین نویسه در رشته فراریافته ظاهر شود، با چنین کد گریز به سبک C جایگزین می‌گردد.

هنگامی که ورودی به عنوان یک مسیر مطلق سیستم فایل واجد شرایط باشد، این الگوریتم کمی گسترش می‌یابد: مسیر دایرکتوری ریشه "/" به صورت یک خط تیره منفرد "-" کدگذاری می‌شود. علاوه بر این، هرگونه نویسه "/" ابتدایی، انتهایی یا تکراری قبل از تبدیل از رشته حذف می‌شود. مثال: /foo//bar/baz/ تبدیل می‌شود به "foo-bar-baz".

این فرآیند گریز کاملاً برگشت‌پذیر است، به شرطی که مشخص باشد آیا رشته فراریافته یک مسیر بوده است یا خیر (نتایج بازگردانی گریز برای مسیرها و رشته‌های غیرمسیر متفاوت است). از دستور systemd-escape(1) می‌توان برای اعمال و بازگردانی گریز روی رشته‌های دلخواه استفاده کرد. از systemd-escape --path برای گریز دادن رشته‌های مسیر، و از systemd-escape بدون --path در سایر موارد استفاده کنید.

بسته به نوع واحد و پیکربندی آن، تعدادی وابستگی واحد به طور ضمنی برقرار می‌شوند. این وابستگی‌های ضمنی می‌توانند فایل پیکربندی واحد را تمیزتر و مرتب‌تر کنند. برای وابستگی‌های ضمنی در هر نوع واحد، لطفاً به بخش «وابستگی‌های ضمنی» در صفحات راهنمای مربوطه مراجعه کنید.

به عنوان مثال، واحدهای سرویس با Type=dbus به طور خودکار وابستگی‌هایی از نوع Requires= و After= به dbus.socket به دست می‌آورند. برای جزئیات systemd.service(5) را ببینید.

وابستگی‌های پیش‌فرض مشابه وابستگی‌های ضمنی هستند، اما می‌توان آن‌ها را با تنظیم DefaultDependencies= روی yes (پیش‌فرض) و no روشن و خاموش کرد، در حالی که وابستگی‌های ضمنی همیشه برقرار هستند. برای آگاهی از تأثیر فعال‌سازی DefaultDependencies= در هر یک از انواع واحدها، بخش «وابستگی‌های پیش‌فرض» در صفحات راهنمای مربوطه را ببینید.

به عنوان مثال، واحدهای هدف تمام وابستگی‌های پیکربندی‌شده از نوع Wants= یا Requires= را با وابستگی‌هایی از نوع After= تکمیل می‌کنند. برای جزئیات systemd.target(5) را ببینید. توجه داشته باشید که این رفتار را می‌توان با تنظیم DefaultDependencies=no در واحدهای مشخص‌شده غیرفعال کرد، یا می‌توان آن را به صورت انتخابی از طریق یک وابستگی صریح Before= بازنویسی نمود.

فایل‌های واحد از مجموعه‌ای از مسیرها که در زمان کامپایل تعیین شده‌اند بارگذاری می‌شوند که در دو جدول زیر توضیح داده شده است. فایل‌های واحدی که در دایرکتوری‌های ابتدای فهرست یافت می‌شوند، فایل‌های هم‌نام در دایرکتوری‌های پایین‌تر فهرست را لغو و بازنویسی می‌کنند [2].

هنگامی که متغیر محیطی $SYSTEMD_UNIT_PATH تنظیم شده باشد، محتوای این متغیر مسیر بارگذاری واحد را بازنویسی می‌کند. اگر $SYSTEMD_UNIT_PATH با یک مؤلفه خالی (":") پایان یابد، مسیر معمول بارگذاری واحد به انتهای محتوای این متغیر افزوده خواهد شد.

جدول ۱.  مسیر بارگذاری هنگام اجرا در حالت سیستمی (--system).

مسیر توضیحات
/etc/systemd/system.control پیکربندی پایدار و گذرا که با استفاده از API د-باس ایجاد شده است
/run/systemd/system.control
/run/systemd/transient پیکربندی پویا برای واحدهای گذرا
/run/systemd/generator.early واحدهای تولیدشده با اولویت بالا (به early-dir در systemd.generator(7) مراجعه کنید)
/etc/systemd/system واحدهای سیستمی ایجادشده توسط مدیر سیستم
/run/systemd/system واحدهای زمان اجرا
/run/systemd/generator واحدهای تولیدشده با اولویت متوسط (به normal-dir در systemd.generator(7) مراجعه کنید)
/usr/local/lib/systemd/system واحدهای سیستمی نصب‌شده توسط مدیر سیستم
/usr/lib/systemd/system واحدهای سیستمی نصب‌شده توسط مدیر بسته توزیع
/run/systemd/generator.late واحدهای تولیدشده با اولویت پایین (به late-dir در systemd.generator(7) مراجعه کنید)

جدول ۲.  مسیر بارگذاری هنگام اجرا در حالت کاربری (--user).

مسیر توضیحات
$XDG_CONFIG_HOME/systemd/user.control or ~/.config/systemd/user.control پیکربندی پایدار و گذرا ایجادشده با استفاده از API د-باس (در صورت تنظیم، $XDG_CONFIG_HOME استفاده می‌شود، در غیر این صورت ~/.config)
$XDG_RUNTIME_DIR/systemd/user.control
$XDG_RUNTIME_DIR/systemd/transient پیکربندی پویا برای واحدهای گذرا
$XDG_RUNTIME_DIR/systemd/generator.early واحدهای تولیدشده با اولویت بالا (به early-dir در systemd.generator(7) مراجعه کنید)
$XDG_CONFIG_HOME/systemd/user or $HOME/.config/systemd/user پیکربندی کاربری (در صورت تنظیم، $XDG_CONFIG_HOME استفاده می‌شود، در غیر این صورت ~/.config)
$XDG_CONFIG_DIRS/systemd/user or /etc/xdg/systemd/user دایرکتوری‌های پیکربندی اضافی طبق مشخصات دایرکتوری پایه XDG (در صورت تنظیم، $XDG_CONFIG_DIRS استفاده می‌شود، در غیر این صورت /etc/xdg)
/etc/systemd/user واحدهای کاربری ایجادشده توسط مدیر سیستم
$XDG_RUNTIME_DIR/systemd/user واحدهای زمان اجرا (تنها زمانی استفاده می‌شود که $XDG_RUNTIME_DIR تنظیم شده باشد)
/run/systemd/user واحدهای زمان اجرا
$XDG_RUNTIME_DIR/systemd/generator واحدهای تولیدشده با اولویت متوسط (به normal-dir در systemd.generator(7) مراجعه کنید)
$XDG_DATA_HOME/systemd/user or $HOME/.local/share/systemd/user واحدهای بسته‌هایی که در دایرکتوری خانه نصب شده‌اند (در صورت تنظیم، $XDG_DATA_HOME استفاده می‌شود، در غیر این صورت ~/.local/share)
$XDG_DATA_DIRS/systemd/user or /usr/local/share/systemd/user and /usr/share/systemd/user دایرکتوری‌های داده اضافی طبق مشخصات دایرکتوری پایه XDG (در صورت تنظیم، $XDG_DATA_DIRS استفاده می‌شود، در غیر این صورت /usr/local/share و /usr/share)
$dir/systemd/user for each $dir in $XDG_DATA_DIRS مکان‌های اضافی برای واحدهای کاربری نصب‌شده، یکی به ازای هر مدخل در $XDG_DATA_DIRS
/usr/local/lib/systemd/user واحدهای کاربری نصب‌شده توسط مدیر سیستم
/usr/lib/systemd/user واحدهای کاربری نصب‌شده توسط مدیر بسته توزیع
$XDG_RUNTIME_DIR/systemd/generator.late واحدهای تولیدشده با اولویت پایین (به late-dir در systemd.generator(7) مراجعه کنید)

مجموعه مسیرهای بارگذاری برای نمونه مدیر کاربری را می‌توان با استفاده از متغیرهای محیطی مختلف گسترش داد یا تغییر داد. و متغیرهای محیطی نیز به نوبه خود می‌توانند با استفاده از مولدهای محیط (environment generators) تنظیم شوند،
systemd.environment-generator(7) را ببینید. به ویژه، $XDG_DATA_HOME و $XDG_DATA_DIRS را می‌توان به راحتی با استفاده از systemd-environment-d-generator(8) تنظیم کرد. بنابراین، دایرکتوری‌های فهرست‌شده در اینجا صرفاً مقادیر پیش‌فرض هستند. برای مشاهده فهرست واقعی که بر اساس گزینه‌های کامپایل و محیط فعلی استفاده می‌شود، از دستور زیر استفاده کنید:

systemd-analyze --user unit-paths

علاوه بر این، واحدهای اضافی ممکن است با ایجاد یک پیوند نمادین اشاره‌کننده به یک فایل واحد در دایرکتوری‌ها، از دایرکتوری‌هایی خارج از مسیر بارگذاری واحد به systemd بارگذاری شوند. برای این منظور می‌توانید از systemctl link استفاده کنید؛ systemctl(1) را ببینید. سیستم فایلی که فایل‌های واحد پیوندشده در آن قرار دارند باید هنگام شروع systemd قابل دسترسی باشد (به عنوان مثال هر چیزی در زیر /home/ یا /var/ مجاز نیست، مگر اینکه آن دایرکتوری‌ها در سیستم فایل ریشه قرار داشته باشند).

بسیار مهم است که بین «فایل‌های واحد پیوندشده» (linked unit files) و «نام‌های مستعار فایل واحد» (unit file aliases) تمایز قائل شویم: هر پیوند نمادینی که در آن مقصد (target) پیوند نمادین درون مسیر بارگذاری واحد باشد به یک نام مستعار تبدیل می‌شود: نام منبع و نام فایل مقصد باید محدودیت‌های خاص فهرست‌شده در بحث نام‌های مستعار در بالا را برآورده سازند، اما فایل مقصد پیوند نمادین لزوماً نباید وجود داشته باشد و در واقع مسیر مقصد پیوند نمادین استفاده نمی‌شود، مگر برای بررسی اینکه آیا مقصد درون مسیر بارگذاری واحد است یا خیر. در مقابل، یک پیوند نمادین که به خارج از مسیر بارگذاری واحد می‌رود نشان‌دهنده یک فایل واحد پیوندشده است. هنگام بارگذاری فایل، پیوند نمادین دنبال می‌شود، اما نام مقصد در غیر این صورت استفاده نمی‌شود (و حتی ممکن است یک نام فایل واحد معتبر نباشد). به عنوان مثال، پیوندهای نمادین /etc/systemd/system/alias1.service → service1.service، /etc/systemd/system/alias2.service → /usr/lib/systemd/service1.service، /etc/systemd/system/alias3.service → /etc/systemd/system/service1.service همگی نام‌های مستعار معتبر هستند و service1.service دارای چهار نام خواهد بود، حتی اگر فایل واحد در /run/systemd/system/service1.service قرار داشته باشد. در مقابل، یک پیوند نمادین /etc/systemd/system/link1.service → ../link1_service_file بدین معناست که link1.service یک «واحد پیوندشده» است و محتوای /etc/systemd/link1_service_file پیکربندی آن را فراهم می‌کند.

مدیر سیستم و سرویس پیکربندی یک واحد را به طور خودکار هنگامی که برای اولین بار به آن ارجاع داده می‌شود بارگذاری می‌کند. همچنین هنگامی که دیگر نیازی به واحد نباشد، پیکربندی و وضعیت واحد را به طور خودکار تخلیه می‌کند («جمع‌آوری زباله» یا garbage collection). یک واحد ممکن است از طریق چندین مکانیزم مختلف مورد ارجاع قرار گیرد:

1.یک واحد بارگذاری‌شده دیگر با وابستگی‌هایی مانند After=، Wants=، ... به آن ارجاع دهد.
2.واحد در حال حاضر در حال شروع، اجرا، بارگذاری مجدد یا توقف باشد.
3.واحد در حال حاضر در وضعیت failed (ناموفق) باشد. (اما به زیر مراجعه کنید.)
4.یک کار (job) برای واحد در صف انتظار باشد.
5.واحد توسط یک برنامه کلاینت IPC فعال پین شده باشد.
6.واحد یک واحد خاص «دائمی» (perpetual) باشد که همیشه فعال و بارگذاری‌شده است. نمونه‌هایی از واحدهای دائمی عبارتند از واحد اتصال ریشه -.mount یا واحد scope به نام init.scope که خود مدیر سرویس در آن قرار دارد.
7.واحد دارای فرآیندهای در حال اجرا مرتبط با خود باشد.

منطق جمع‌آوری زباله را می‌توان با گزینه CollectMode= تغییر داد، که امکان پیکربندی مجاز بودن تخلیه خودکار واحدهایی را که در وضعیت failed هستند فراهم می‌کند، به زیر مراجعه کنید.

توجه داشته باشید که وقتی پیکربندی و وضعیت یک واحد تخلیه می‌شود، تمام نتایج اجرا، مانند کدهای خروج، سیگنال‌های خروج، مصرف منابع و سایر آمارها از دست می‌روند، به جز مواردی که در زیرسیستم گزارش‌ها ذخیره شده‌اند.

از systemctl daemon-reload یا یک دستور معادل برای بارگذاری مجدد پیکربندی واحد در حالی که واحد از قبل بارگذاری شده است استفاده کنید. در این حالت، تمام تنظیمات پیکربندی پاک شده و با پیکربندی جدید جایگزین می‌شوند (که البته ممکن است بلافاصله اعمال نشود)، اما تمام وضعیت‌های زمان اجرا ذخیره/بازیابی می‌شوند.

فایل واحد ممکن است شامل یک بخش [Unit] باشد که اطلاعات عمومی در مورد واحد را حمل می‌کند که وابسته به نوع واحد نیست:

Description=

یک عنوان کوتاه و قابل خواندن برای انسان از واحد. این ممکن است توسط systemd (و سایر رابط‌های کاربری) به عنوان یک برچسب قابل مشاهده برای کاربر برای واحد استفاده شود، بنابراین این رشته به جای توصیف واحد، باید واحد را شناسایی کند، علیرغم نام آن. این رشته همچنین نباید صرفاً نام واحد را تکرار کند. "Apache2 Web Server" یک مثال خوب است. مثال‌های بد عبارتند از "high-performance lightweight HTTP server" (بسیار عمومی) یا "Apache2" (بی‌معنی برای افرادی که آپاچی را نمی‌شناسند، و نام واحد را تکرار می‌کند). systemd ممکن است از این رشته به عنوان اسم در پیام‌های وضعیت استفاده کند ("Starting description...", "Started description.", "Reached target description.", "Failed to start description.")، بنابراین باید با حروف بزرگ آغاز شود (در انگلیسی) و نباید یک جمله کامل یا عبارتی با فعل استمراری باشد. مثال‌های بد شامل "exiting the container" یا "updating the database once per day." است.

افزوده‌شده در نسخه ۲۰۱.

Documentation=

فهرستی از URIهای جداشده با فاصله که به مستندات این واحد یا پیکربندی آن ارجاع می‌دهند. فقط URIهای از نوع "http://"، "https://"، "file:"، "info:"، "man:" پذیرفته می‌شوند. برای اطلاعات بیشتر در مورد نحو این URIها، uri(7) را ببینید. این URIها باید به ترتیب ارتباط، با شروع از مرتبط‌ترین، فهرست شوند. ایده خوبی است که ابتدا به مستنداتی ارجاع داده شود که هدف واحد را توضیح می‌دهد، به دنبال آن نحوه پیکربندی آن، و سپس هر مستندات مرتبط دیگر. این گزینه ممکن است بیش از یک بار مشخص شود، که در این صورت فهرست مشخص‌شده از URIها ادغام می‌شود. اگر رشته خالی به این گزینه اختصاص داده شود، فهرست بازنشانی می‌شود و تمام انتساب‌های قبلی بی اثر خواهند بود.

افزوده‌شده در نسخه ۲۰۱.

Wants=

وابستگی‌های نیازمندی (ضعیف) به سایر واحدها را پیکربندی می‌کند. این گزینه ممکن است بیش از یک بار مشخص شود یا چندین واحد جداشده با فاصله ممکن است در یک گزینه مشخص شوند که در این صورت وابستگی‌ها برای همه نام‌های فهرست‌شده ایجاد خواهند شد. وابستگی‌های این نوع همچنین می‌توانند در خارج از فایل پیکربندی واحد با افزودن یک پیوند نمادین به یک دایرکتوری .wants/ همراه فایل واحد پیکربندی شوند. برای جزئیات، بالا را ببینید.

واحدهای فهرست‌شده در این گزینه در صورت راه‌اندازی واحد پیکربندی‌کننده، راه‌اندازی خواهند شد. با این حال، اگر واحدهای فهرست‌شده در راه‌اندازی ناموفق شوند یا نتوانند به تراکنش اضافه شوند، این هیچ تأثیری بر اعتبار کل تراکنش ندارد و این واحد همچنان راه‌اندازی خواهد شد. این روش توصیه‌شده برای متصل کردن راه‌اندازی یک واحد به راه‌اندازی واحد دیگر است.

توجه داشته باشید که وابستگی‌های نیازمندی بر ترتیبی که سرویس‌ها راه‌اندازی یا متوقف می‌شوند تأثیری ندارند. این موضوع باید به طور مستقل با گزینه‌های After= یا Before= پیکربندی شود. اگر واحد foo.service واحد bar.service را طبق پیکربندی با Wants= به همراه بیاورد و هیچ ترتیبی با After= یا Before= پیکربندی نشده باشد، در صورت فعال شدن foo.service، هر دو واحد به طور همزمان و بدون هیچ تأخیری بین آن‌ها راه‌اندازی خواهند شد.

افزوده‌شده در نسخه ۲۰۱.

Requires=

مشابه Wants=، اما یک وابستگی نیازمندی قوی‌تر را اعلان می‌کند. وابستگی‌های این نوع همچنین می‌توانند با افزودن یک پیوند نمادین به یک دایرکتوری .requires/ همراه فایل واحد پیکربندی شوند.

اگر این واحد فعال شود، واحدهای فهرست‌شده نیز فعال خواهند شد. اگر یکی از واحدهای دیگر در فعال‌سازی ناموفق شود، و یک وابستگی ترتیبی After= روی واحد ناموفق تنظیم شده باشد، این واحد راه‌اندازی نخواهد شد. علاوه بر این، با یا بدون تعیین After=، اگر یکی از واحدهای دیگر به صراحت متوقف (یا بازراه‌اندازی) شود، این واحد متوقف (یا بازراه‌اندازی) خواهد شد.

اغلب، استفاده از Wants= به جای Requires= انتخاب بهتری است تا به سیستمی دست یافت که در مواجهه با سرویس‌های ناموفق استحکام بیشتری داشته باشد.

توجه داشته باشید که این نوع وابستگی دلالت بر این ندارد که واحد دیگر همیشه باید در وضعیت فعال باشد وقتی این واحد در حال اجراست. به طور خاص: بررسی‌های ناموفق شرایط (مانند ConditionPathExists=، ConditionPathIsSymbolicLink=، ... — به زیر مراجعه کنید) باعث شکست کار راه‌اندازی واحدی با وابستگی Requires= به آن نمی‌شوند. همچنین، برخی از انواع واحدها ممکن است به خودی خود غیرفعال شوند (به عنوان مثال، یک فرآیند سرویس ممکن است تصمیم بگیرد به طور تمیز خارج شود، یا یک دستگاه ممکن است توسط کاربر جدا شود)، که به واحدهای دارای وابستگی Requires= منتشر نمی‌شود. از نوع وابستگی BindsTo= همراه با After= استفاده کنید تا اطمینان حاصل شود که یک واحد هرگز نمی‌تواند در وضعیت فعال باشد بدون اینکه یک واحد خاص دیگر نیز در وضعیت فعال باشد (به زیر مراجعه کنید).

افزوده‌شده در نسخه ۲۰۱.

Requisite=

مشابه Requires=. با این حال، اگر واحدهای فهرست‌شده در اینجا از قبل راه‌اندازی نشده باشند، راه‌اندازی نخواهند شد و راه‌اندازی این واحد فوراً با شکست مواجه می‌شود. Requisite= دلالت بر وابستگی ترتیبی ندارد، حتی اگر هر دو واحد در یک تراکنش راه‌اندازی شوند. از این رو این تنظیم معمولاً باید با After= ترکیب شود تا اطمینان حاصل شود که این واحد قبل از واحد دیگر راه‌اندازی نمی‌شود.

هنگامی که Requisite=b.service در a.service استفاده می‌شود، این وابستگی به عنوان RequisiteOf=a.service در فهرست ویژگی‌های b.service نشان داده خواهد شد. وابستگی RequisiteOf= را نمی‌توان مستقیماً مشخص کرد.

افزوده‌شده در نسخه ۲۰۱.

BindsTo=

وابستگی‌های نیازمندی را بسیار شبیه به سبک Requires= پیکربندی می‌کند. با این حال، این نوع وابستگی قوی‌تر است: علاوه بر اثرات Requires= که از قبل در هنگام توقف (یا بازراه‌اندازی) صریح یک واحد فهرست‌شده، واحد پیکربندی‌کننده را متوقف (یا بازراه‌اندازی) می‌کند، هنگامی که یک واحد فهرست‌شده به طور غیرمنتظره متوقف می‌شود (که شامل مواردی است که با شکست مواجه می‌شود) نیز این کار را انجام می‌دهد. واحدها می‌توانند به دلایل مختلف به طور ناگهانی و غیرمنتظره وارد وضعیت غیرفعال شوند: فرآیند اصلی یک واحد سرویس ممکن است با انتخاب خود خاتمه یابد، دستگاه پشتیبان یک واحد دستگاه ممکن است قطع شود یا نقطه اتصال یک واحد mount ممکن است بدون دخالت مدیر سیستم و سرویس جدا (unmount) شود.

هنگامی که در ارتباط با After= روی همان واحد استفاده می‌شود، رفتار BindsTo= حتی قوی‌تر است. در این حالت، واحدی که به آن متصل شده است به طور اکید باید در وضعیت فعال باشد تا این واحد نیز در وضعیت فعال باشد. این امر نه تنها به این معنی است که واحدی که به واحد دیگری متصل است که ناگهان وارد وضعیت غیرفعال می‌شود متوقف خواهد شد، بلکه واحدی که به واحد دیگری متصل است که به دلیل برآورده نشدن یک بررسی شرط (مانند ConditionPathExists=، ConditionPathIsSymbolicLink=، ... — به زیر مراجعه کنید) نادیده گرفته می‌شود نیز در صورت اجرا متوقف خواهد شد. بنابراین، در بسیاری از موارد بهتر است BindsTo= را با After= ترکیب کنید.

هنگامی که BindsTo=b.service روی a.service استفاده می‌شود، این وابستگی به عنوان BoundBy=a.service در فهرست ویژگی‌های b.service نشان داده خواهد شد. وابستگی BoundBy= را نمی‌توان مستقیماً مشخص کرد.

افزوده‌شده در نسخه ۲۰۱.

PartOf=

وابستگی‌هایی مشابه Requires= را پیکربندی می‌کند، اما محدود به توقف و راه‌اندازی مجدد واحدها است. هنگامی که systemd واحدهای فهرست‌شده در اینجا را متوقف یا بازراه‌اندازی می‌کند، این عمل به این واحد منتشر می‌شود. توجه داشته باشید که این یک وابستگی یک‌طرفه است — تغییرات در این واحد بر واحدهای فهرست‌شده تأثیری ندارد.

هنگامی که PartOf=b.service روی a.service استفاده می‌شود، این وابستگی به عنوان ConsistsOf=a.service در فهرست ویژگی‌های b.service نشان داده خواهد شد. وابستگی ConsistsOf= را نمی‌توان مستقیماً مشخص کرد.

افزوده‌شده در نسخه ۲۰۱.

Upholds=

وابستگی‌هایی مشابه Wants= را پیکربندی می‌کند، اما تا زمانی که این واحد بالاست، تمام واحدهای فهرست‌شده در Upholds= هر زمان که غیرفعال یا ناموفق تشخیص داده شوند و هیچ کاری در صف برای آن‌ها نباشد، راه‌اندازی می‌شوند. در حالی که وابستگی Wants= به یک واحد دیگر دارای یک اثر یک‌باره هنگام راه‌اندازی این واحد است، وابستگی Upholds= به آن اثر پیوسته دارد و در صورت لزوم دائماً واحد را مجدداً راه‌اندازی می‌کند. این یک جایگزین برای تنظیم Restart= واحدهای سرویس است، تا اطمینان حاصل شود که هر اتفاقی بیفتد آن‌ها در حال اجرا نگه داشته می‌شوند. راه‌اندازی مجدد بدون تأخیر انجام می‌شود و محدودیت نرخ معمول برای هر واحد اعمال می‌گردد.

هنگامی که Upholds=b.service روی a.service استفاده می‌شود، این وابستگی به عنوان UpheldBy=a.service در فهرست ویژگی‌های b.service نشان داده خواهد شد.

افزوده‌شده در نسخه ۲۴۹.

Conflicts=

فهرستی از نام‌های واحدهای جداشده با فاصله. وابستگی‌های نیازمندی منفی را پیکربندی می‌کند. اگر یک واحد تنظیم Conflicts= را روی واحد دیگری داشته باشد، راه‌اندازی اولی دومی را متوقف می‌کند و برعکس.

توجه داشته باشید که این تنظیم مانند وابستگی‌های Wants= و Requires= توضیح داده شده در بالا، دلالت بر وابستگی ترتیبی ندارد. این بدان معناست که برای اطمینان از متوقف شدن واحد متضاد قبل از راه‌اندازی واحد دیگر، باید وابستگی After= یا Before= اعلان شود. مهم نیست که کدام یک از این دو وابستگی ترتیبی استفاده شود، زیرا کارهای توقف همیشه قبل از کارهای راه‌اندازی ترتیب‌بندی می‌شوند، به بحث در Before=/After= در زیر مراجعه کنید.

اگر واحد A که با واحد B تضاد دارد برنامه‌ریزی شده باشد تا همزمان با B راه‌اندازی شود، تراکنش یا با شکست مواجه می‌شود (در صورتی که هر دو بخش‌های ضروری تراکنش باشند) یا برای اصلاح تغییر داده می‌شود (در صورتی که یک یا هر دو کار بخش ضروری تراکنش نباشند). در حالت دوم، کاری که لازم نیست حذف می‌شود، یا در صورتی که هر دو لازم نباشند، واحدی که تضاد ایجاد می‌کند راه‌اندازی شده و واحدی که با آن تضاد دارد متوقف می‌شود.

افزوده‌شده در نسخه ۲۰۱.

Before=, After=

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

این دو تنظیم وابستگی‌های ترتیبی را بین واحدها پیکربندی می‌کنند. اگر واحد foo.service حاوی تنظیم Before=bar.service باشد و هر دو واحد در حال راه‌اندازی باشند، راه‌اندازی bar.service تا زمانی که foo.service راه‌اندازی خود را به پایان برساند به تأخیر می‌افتد. After= معکوس Before= است، یعنی در حالی که Before= اطمینان می‌دهد که واحد پیکربندی‌شده قبل از شروع به کار واحد فهرست‌شده راه‌اندازی می‌شود، After= برعکس را تضمین می‌کند، یعنی واحد فهرست‌شده قبل از راه‌اندازی واحد پیکربندی‌شده به طور کامل راه‌اندازی شده باشد.

هنگامی که دو واحد با یک وابستگی ترتیبی بین آن‌ها خاموش می‌شوند، معکوس ترتیب راه‌اندازی اعمال می‌شود. یعنی اگر یک واحد با After= روی واحد دیگری پیکربندی شده باشد، در صورت خاموش شدن هر دو، اولی قبل از دومی متوقف می‌شود. با داشتن دو واحد با هرگونه وابستگی ترتیبی بین آن‌ها، اگر یک واحد خاموش شود و دیگری راه‌اندازی شود، خاموش شدن قبل از راه‌اندازی ترتیب‌بندی می‌شود. در این حالت فرقی نمی‌کند که وابستگی ترتیبی After= باشد یا Before=. همچنین مهم نیست کدام یک از این دو خاموش می‌شود، تا زمانی که یکی خاموش و دیگری راه‌اندازی می‌شود؛ خاموش شدن در همه موارد قبل از راه‌اندازی ترتیب‌بندی می‌گردد. اگر دو واحد هیچ وابستگی ترتیبی بین خود نداشته باشند، به طور همزمان خاموش یا راه‌اندازی می‌شوند و هیچ ترتیبی صورت نمی‌گیرد. اینکه یک واحد دقیقاً چه زمانی راه‌اندازی خود را به پایان رسانده است به نوع واحد بستگی دارد. از همه مهم‌تر، برای واحدهای سرویس، راه‌اندازی به منظور Before=/After= زمانی پایان‌یافته تلقی می‌شود که تمام دستورات راه‌اندازی پیکربندی‌شده آن فراخوانی شده باشند و یا ناموفق شده باشند یا موفقیت در راه‌اندازی را گزارش داده باشند. توجه داشته باشید که این شامل ExecStartPost= (یا ExecStopPost= برای حالت خاموش شدن) می‌شود.

توجه داشته باشید که این تنظیمات مستقل و متعامد با وابستگی‌های نیازمندی پیکربندی‌شده توسط Requires=، Wants=، Requisite= یا BindsTo= هستند. این یک الگوی رایج است که یک نام واحد در هر دو گزینه After= و Wants= گنجانده شود، که در این حالت واحد فهرست‌شده قبل از واحدی که با این گزینه‌ها پیکربندی شده است راه‌اندازی می‌شود.

توجه داشته باشید که وابستگی‌های Before= روی واحدهای دستگاه هیچ تأثیری ندارند و پشتیبانی نمی‌شوند. دستگاه‌ها معمولاً در نتیجه یک رویداد اتصال گرم (hotplug) خارجی در دسترس قرار می‌گیرند و systemd واحد دستگاه متناظر را بدون تأخیر ایجاد می‌کند.

افزوده‌شده در نسخه ۲۰۱.

OnFailure=

فهرستی از یک یا چند واحد جداشده با فاصله که هنگام ورود این واحد به وضعیت "failed" (ناموفق) فعال می‌شوند.

افزوده‌شده در نسخه ۲۰۱.

OnSuccess=

فهرستی از یک یا چند واحد جداشده با فاصله که هنگام ورود این واحد به وضعیت "inactive" (غیرفعال) فعال می‌شوند.

افزوده‌شده در نسخه ۲۴۹.

PropagatesReloadTo=, ReloadPropagatedFrom=

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

افزوده‌شده در نسخه ۲۰۱.

PropagatesStopTo=, StopPropagatedFrom=

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

افزوده‌شده در نسخه ۲۴۹.

JoinsNamespaceOf=

برای واحدهایی که فرآیندها را شروع می‌کنند (مانند واحدهای سرویس)، یک یا چند واحد دیگر را فهرست می‌کند که فضای نام شبکه و/یا فایل موقت آن‌ها باید به آن ملحق شود. اگر این تنظیم روی یک واحد مشخص شود (مثلاً a.service دارای JoinsNamespaceOf=b.service باشد)، آنگاه وابستگی معکوس (JoinsNamespaceOf=a.service برای b.service) به طور ضمنی در نظر گرفته می‌شود. این فقط برای انواع واحدهایی اعمال می‌شود که از دستورالعمل‌های PrivateNetwork=، NetworkNamespacePath=، PrivateIPC=، IPCNamespacePath= و PrivateTmp= پشتیبانی می‌کنند (برای جزئیات systemd.exec(5) را ببینید). اگر واحدی که این تنظیم را دارد راه‌اندازی شود، فرآیندهای آن همان /tmp/، /var/tmp/، فضای نام IPC و فضای نام شبکه را مانند یکی از واحدهای فهرست‌شده که راه‌اندازی شده است مشاهده خواهند کرد. اگر چندین واحد فهرست‌شده از قبل راه‌اندازی شده باشند و این واحدها فضای نام خود را به اشتراک نگذارند، مشخص نیست که به کدام فضای نام ملحق می‌شود. توجه داشته باشید که این تنظیم تنها در صورتی تأثیر دارد که PrivateNetwork=/NetworkNamespacePath=، PrivateIPC=/IPCNamespacePath= و/یا PrivateTmp= هم برای واحدی که به فضای نام ملحق می‌شود و هم برای واحدی که فضای نام آن ملحق می‌شود فعال باشد.

افزوده‌شده در نسخه ۲۰۹.

RequiresMountsFor=

فهرستی از مسیرهای مطلق جداشده با فاصله را می‌گیرد. به طور خودکار وابستگی‌هایی از نوع Requires= و After= را برای تمام واحدهای اتصال (mount) مورد نیاز برای دسترسی به مسیر مشخص‌شده اضافه می‌کند.

نقاط اتصالی که با noauto علامت‌گذاری شده‌اند به طور خودکار از طریق local-fs.target متصل نمی‌شوند، اما همچنان برای اهداف این گزینه محترم شمرده می‌شوند، یعنی توسط این واحد به همراه آورده خواهند شد.

افزوده‌شده در نسخه ۲۰۱.

WantsMountsFor=

مشابه RequiresMountsFor=، اما وابستگی‌هایی از نوع Wants= را به جای Requires= اضافه می‌کند.

افزوده‌شده در نسخه ۲۵۶.

OnSuccessJobMode=, OnFailureJobMode=

مقداری از "fail"، "replace"، "replace-irreversibly"، "isolate"، "flush"، "ignore-dependencies" یا "ignore-requirements" را می‌گیرد. پیش‌فرض "replace" است. مشخص می‌کند که واحدهای فهرست‌شده در OnSuccess=/OnFailure= چگونه در صف قرار می‌گیرند. گزینه --job-mode= از systemctl(1) را برای جزئیات مربوط به مقادیر ممکن ببینید. اگر این مقدار روی "isolate" تنظیم شود، تنها یک واحد منفرد ممکن است در OnSuccess=/OnFailure= فهرست شود.

افزوده‌شده در نسخه ۲۰۹.

IgnoreOnIsolate=

یک آرگومان بولی می‌گیرد. اگر true باشد، این واحد هنگام ایزوله کردن یک واحد دیگر متوقف نخواهد شد. برای واحدهای سرویس، هدف، سوکت، تایمر و مسیر مقدار پیش‌فرض false است و برای واحدهای slice، scope، دستگاه، swap، mount و automount مقدار پیش‌فرض true است.

افزوده‌شده در نسخه ۲۰۱.

StopWhenUnneeded=

یک آرگومان بولی می‌گیرد. اگر true باشد، این واحد زمانی که دیگر استفاده نمی‌شود متوقف خواهد شد. توجه داشته باشید که به منظور به حداقل رساندن کارهایی که باید انجام شوند، systemd به طور پیش‌فرض واحدها را متوقف نمی‌کند مگر اینکه با سایر واحدها تضاد داشته باشند، یا کاربر صریحاً خاموش شدن آن‌ها را درخواست کرده باشد. اگر این گزینه تنظیم شود، اگر هیچ واحد فعال دیگری به آن نیاز نداشته باشد، یک واحد به طور خودکار پاکسازی خواهد شد. پیش‌فرض false است.

افزوده‌شده در نسخه ۲۰۱.

RefuseManualStart=, RefuseManualStop=

یک آرگومان بولی می‌گیرد. اگر true باشد، این واحد تنها می‌تواند به طور غیرمستقیم فعال یا غیرفعال شود. در این حالت، راه‌اندازی صریح یا خاتمه درخواست‌شده توسط کاربر رد می‌شود، اما اگر به عنوان وابستگی یک واحد دیگر راه‌اندازی یا متوقف شود، راه‌اندازی یا خاتمه با موفقیت انجام خواهد شد. این ویژگی بیشتر یک ویژگی ایمنی است تا اطمینان حاصل شود که کاربر به طور تصادفی واحدهایی را که قرار نیست به صراحت فعال شوند فعال نمی‌کند، و به طور تصادفی واحدهایی را که قرار نیست غیرفعال شوند غیرفعال نمی‌سازد. این گزینه‌ها به طور پیش‌فرض false هستند.

افزوده‌شده در نسخه ۲۰۱.

AllowIsolate=

یک آرگومان بولی می‌گیرد. اگر true باشد، این واحد ممکن است با دستور systemctl isolate استفاده شود. در غیر این صورت، این درخواست رد خواهد شد. احتمالاً ایده خوبی است که این گزینه را غیرفعال بگذارید مگر برای واحدهای هدف که باید مشابه سطوح اجرا (runlevels) در سیستم‌های SysV init استفاده شوند، صرفاً به عنوان یک اقدام احتیاطی برای جلوگیری از وضعیت‌های غیرقابل استفاده سیستم. این گزینه به طور پیش‌فرض false است.

افزوده‌شده در نسخه ۲۰۱.

DefaultDependencies=

یک آرگومان بولی می‌گیرد. اگر yes (پیش‌فرض) باشد، چند وابستگی پیش‌فرض به طور ضمنی برای واحد ایجاد می‌شود. وابستگی‌های واقعی ایجادشده به نوع واحد بستگی دارد. به عنوان مثال، برای واحدهای سرویس، این وابستگی‌ها تضمین می‌کنند که سرویس تنها پس از تکمیل مقداردهی اولیه پایه سیستم شروع به کار می‌کند و در هنگام خاموش شدن سیستم به درستی خاتمه می‌یابد. صفحات راهنمای مربوطه را برای جزئیات ببینید. به طور کلی، فقط سرویس‌های درگیر در راه‌اندازی اولیه یا خاموش شدن دیرهنگام باید این گزینه را روی no تنظیم کنند. اکیداً توصیه می‌شود این گزینه را برای اکثر قریب به اتفاق واحدهای معمولی فعال بگذارید. اگر روی no تنظیم شود، این گزینه تمام وابستگی‌های ضمنی را غیرفعال نمی‌کند، بلکه فقط وابستگی‌های غیرضروری را غیرفعال می‌سازد.

افزوده‌شده در نسخه ۲۰۱.

SurviveFinalKillSignal=

یک آرگومان بولی می‌گیرد. پیش‌فرض no است. اگر yes باشد، فرآیندهای متعلق به این واحد در طول فاز نهایی فرآیند خاموش شدن سیستم، سیگنال‌های نهایی "SIGTERM" و "SIGKILL" را دریافت نخواهند کرد. این قابلیت جایگزین مکانیزم قدیمی‌تری می‌شود که به یک برنامه اجازه می‌داد "argv[0][0] = '@'" را همان‌طور که در systemd و دیمن‌های ذخیره‌سازی برای سیستم فایل ریشه[3] شرح داده شده است تنظیم کند، که البته همچنان پشتیبانی می‌شود.

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

CollectMode=

الگوریتم «جمع‌آوری زباله» را برای این واحد دستکاری و تنظیم می‌کند. یکی از مقادیر inactive یا inactive-or-failed را می‌گیرد. اگر روی inactive تنظیم شود، اگر واحد در وضعیت inactive باشد و توسط کلاینت‌ها، کارها یا واحدهای دیگر ارجاع داده نشود، تخلیه خواهد شد — اما اگر در وضعیت failed باشد تخلیه نمی‌شود. در حالت failed، واحدهای ناموفق تخلیه نمی‌شوند تا زمانی که کاربر systemctl reset-failed را روی آن‌ها فراخوانی کند تا وضعیت failed را بازنشانی کند، یا یک دستور معادل. این رفتار تغییر می‌یابد اگر این گزینه روی inactive-or-failed تنظیم شود: در این حالت، واحد حتی اگر در وضعیت failed باشد نیز تخلیه می‌شود، و بنابراین بازنشانی صریح وضعیت failed لازم نیست. توجه داشته باشید که اگر از این حالت استفاده شود، نتایج واحد (مانند کدهای خروج، سیگنال‌های خروج، منابع مصرف‌شده، ...) بلافاصله پس از تکمیل واحد پاک می‌شوند، به جز مواردی که در زیرسیستم گزارش‌گیری ذخیره شده‌اند. پیش‌فرض inactive است.

افزوده‌شده در نسخه ۲۳۶.

FailureAction=, SuccessAction=

عملیاتی را که باید هنگام توقف واحد و ورود به وضعیت ناموفق (failed) یا غیرفعال (inactive) انجام شود، پیکربندی می‌کند. یکی از مقادیر none، reboot، reboot-force، reboot-immediate، poweroff، poweroff-force، poweroff-immediate، exit، exit-force، soft-reboot، soft-reboot-force، kexec، kexec-force، halt، halt-force و halt-immediate را می‌گیرد. در حالت سیستمی، تمام گزینه‌ها مجاز هستند. در حالت کاربری، فقط none، exit و exit-force مجاز هستند. هر دو گزینه به طور پیش‌فرض none هستند.

اگر none تنظیم شود، هیچ عملیاتی انجام نخواهد شد. reboot باعث راه‌اندازی مجدد به دنبال روال عادی خاموش شدن می‌شود (یعنی معادل systemctl reboot). reboot-force باعث راه‌اندازی مجدد اجباری می‌شود که تمام فرآیندها را با اجبار خاتمه می‌دهد اما نباید در راه‌اندازی مجدد باعث سیستم‌های فایل کثیف شود (یعنی معادل systemctl reboot -f) و reboot-immediate باعث اجرای فوری فراخوان سیستمی reboot(2) می‌شود که ممکن است منجر به از دست رفتن داده‌ها شود (یعنی معادل systemctl reboot -ff). به طور مشابه، poweroff، poweroff-force، poweroff-immediate، kexec، kexec-force، halt، halt-force و halt-immediate به ترتیب اثر خاموش کردن سیستم، اجرای kexec و متوقف ساختن کامل پردازنده سیستم را با مفاهیم مشابه دارند. exit باعث می‌شود که مدیر پس از طی روال عادی خاموش شدن خارج شود، و exit-force باعث می‌شود که بدون متوقف کردن سرویس‌ها خاتمه یابد. هنگامی که exit یا exit-force استفاده می‌شود، به طور پیش‌فرض وضعیت خروج فرآیند اصلی واحد (در صورت وجود) از مدیر سرویس بازگردانده می‌شود. با این حال، این را می‌توان با FailureActionExitStatus=/SuccessActionExitStatus= بازنویسی کرد، به زیر مراجعه کنید. soft-reboot یک عملیات راه‌اندازی مجدد فضای کاربری را فعال می‌کند. soft-reboot-force نیز این کار را انجام می‌دهد، اما قبل از آن تراکنش خاموش شدن را طی نمی‌کند.

افزوده‌شده در نسخه ۲۳۶.

FailureActionExitStatus=, SuccessActionExitStatus=

وضعیت خروج را برای انتشار مجدد به مدیر کانتینر فراخواننده (در مورد یک سرویس سیستمی) یا مدیر سرویس (در مورد یک مدیر کاربری) کنترل می‌کند هنگامی که FailureAction=/SuccessAction= روی exit یا exit-force تنظیم شده باشد و عملیات فعال شود. به طور پیش‌فرض، وضعیت خروج فرآیند اصلی واحد تحریک‌کننده (در صورت وجود) منتشر می‌شود. مقداری در محدوده ۰...۲۵۵ یا رشته خالی را برای درخواست رفتار پیش‌فرض می‌گیرد.

افزوده‌شده در نسخه ۲۴۰.

JobTimeoutSec=, JobRunningTimeoutSec=

JobTimeoutSec= یک مهلت زمانی برای کل کار مشخص می‌کند که هنگام قرار گرفتن کار در صف شروع به اجرا می‌کند. JobRunningTimeoutSec= یک مهلت زمانی را مشخص می‌کند که با شروع واقعی کارِ در صف قرار گرفته، شروع به اجرا می‌کند. اگر به هر یک از محدودیت‌ها برسد، کار لغو خواهد شد، با این حال واحد تغییر وضعیت نمی‌دهد یا حتی وارد حالت "failed" نمی‌شود.

هر دو تنظیم یک بازه زمانی را با واحد پیش‌فرض ثانیه می‌گیرند، اما واحدهای دیگر نیز می‌توانند مشخص شوند، systemd.time(7) را ببینید. مقدار پیش‌فرض "infinity" (مهلت‌های زمانی کار غیرفعال است) است، به جز برای واحدهای دستگاه که در آن‌ها JobRunningTimeoutSec= به طور پیش‌فرض روی DefaultDeviceTimeoutSec= تنظیم می‌شود.

نکته: این مهلت‌های زمانی مستقل از هرگونه مهلت زمانی ویژه واحد هستند (به عنوان مثال، مهلت زمانی تنظیم‌شده با TimeoutStartSec= در واحدهای سرویس). مهلت زمانی کار هیچ تأثیری بر خود واحد ندارد. یا به عبارت دیگر: مهلت‌های زمانی ویژه واحد برای لغو تغییرات وضعیت واحد و بازگرداندن آن‌ها مفید هستند. اما مهلت زمانی کار تنظیم‌شده با این گزینه فقط برای لغو کاری که منتظر تغییر وضعیت واحد است مفید است.

افزوده‌شده در نسخه ۲۰۱.

JobTimeoutAction=, JobTimeoutRebootArgument=

JobTimeoutAction= به صورت اختیاری یک عملیات اضافی را برای زمانی که مهلت زمانی سپری می‌شود پیکربندی می‌کند، توضیحات JobTimeoutSec= و JobRunningTimeoutSec= در بالا را ببینید. این گزینه همان مقادیر FailureAction=/SuccessAction= را می‌پذیرد. پیش‌فرض none است.

JobTimeoutRebootArgument= یک رشته اختیاری برای راه‌اندازی مجدد پیکربندی می‌کند تا به فراخوان سیستمی reboot(2) ارسال شود.

افزوده‌شده در نسخه ۲۴۰.

StartLimitIntervalSec=interval, StartLimitBurst=burst

محدودیت نرخ راه‌اندازی واحد را پیکربندی می‌کند. واحدهایی که بیش از burst بار در بازه زمانی interval شروع به کار کنند، دیگر اجازه راه‌اندازی نخواهند داشت. از StartLimitIntervalSec= برای پیکربندی بازه بررسی و از StartLimitBurst= برای پیکربندی تعداد دفعات مجاز راه‌اندازی در هر بازه استفاده کنید.

interval یک بازه زمانی با واحد پیش‌فرض ثانیه است، اما سایر واحدها نیز می‌توانند مشخص شوند، systemd.time(7) را ببینید. مقدار ویژه "infinity" می‌تواند برای محدود کردن تعداد کل تلاش‌های راه‌اندازی استفاده شود، حتی اگر آن‌ها در فواصل زمانی بزرگ رخ دهند. مقدار پیش‌فرض روی DefaultStartLimitIntervalSec= در فایل پیکربندی مدیر تنظیم شده است، و ممکن است برای غیرفعال کردن هر نوع محدودیت نرخ روی ۰ تنظیم شود. burst یک عدد است و به طور پیش‌فرض روی DefaultStartLimitBurst= در فایل پیکربندی مدیر تنظیم می‌شود.

این گزینه‌های پیکربندی به ویژه در ارتباط با تنظیم سرویس Restart= مفید هستند (به systemd.service(5) مراجعه کنید)؛ با این حال، آن‌ها برای انواع شروع‌ها (از جمله دستی) اعمال می‌شوند، نه فقط مواردی که توسط منطق Restart= تحریک شده‌اند.

توجه داشته باشید واحدهایی که برای Restart= پیکربندی شده‌اند و به حد مجاز راه‌اندازی می‌رسند، دیگر تلاشی برای راه‌اندازی مجدد آن‌ها صورت نمی‌گیرد؛ با این حال، ممکن است پس از سپری شدن interval، همچنان به صورت دستی یا از طریق یک تایمر یا سوکت در نقطه‌ای بعدی مجدداً راه‌اندازی شوند. از آن نقطه به بعد، منطق راه‌اندازی مجدد دوباره فعال می‌شود. دستور systemctl reset-failed باعث پاک شدن شمارنده نرخ راه‌اندازی مجدد برای یک سرویس می‌شود، که اگر مدیر سیستم بخواهد به صورت دستی یک واحد را راه‌اندازی کند و محدودیت شروع با آن تداخل داشته باشد، مفید است. محدودیت نرخ پس از اجرای هرگونه بررسی شرایط واحد اعمال می‌شود، و از این رو فعال‌سازی‌های واحد با شرایط ناموفق در محدودیت نرخ محاسبه نمی‌شوند.

هنگامی که یک واحد به دلیل منطق جمع‌آوری زباله (به بالا مراجعه کنید) تخلیه می‌شود، شمارنده‌های محدودیت نرخ آن نیز پاک می‌شوند. این بدان معناست که پیکربندی محدودیت نرخ شروع برای واحدی که به طور مداوم به آن ارجاع داده نمی‌شود، هیچ اثری ندارد.

این تنظیم برای واحدهای slice، target، device و scope اعمال نمی‌شود، زیرا آن‌ها انواع واحدهایی هستند که فعال‌سازی آن‌ها یا هرگز ناموفق نمی‌شود، یا تنها یک بار می‌تواند موفق شود.

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

StartLimitAction=

یک اقدام اضافی را برای انجام در صورتی که محدودیت نرخ پیکربندی‌شده با StartLimitIntervalSec= و StartLimitBurst= تکمیل شود، پیکربندی می‌کند. این گزینه همان مقادیر تنظیمات FailureAction=/SuccessAction= را می‌پذیرد. اگر none تنظیم شود، رسیدن به حد مجاز نرخ هیچ اقدامی به جز عدم اجازه راه‌اندازی را به دنبال نخواهد داشت. پیش‌فرض none است.

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

RebootArgument=

آرگومان اختیاری برای فراخوان سیستمی reboot(2) را پیکربندی می‌کند اگر StartLimitAction= یا FailureAction= یک اقدام راه‌اندازی مجدد باشد. این دقیقاً مانند آرگومان اختیاری برای دستور systemctl reboot عمل می‌کند.

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

SourcePath=

مسیری به یک فایل پیکربندی که این واحد از آن تولید شده است. این در درجه اول برای پیاده‌سازی ابزارهای مولد (generator) مفید است که پیکربندی را از یک قالب فایل پیکربندی خارجی به فایل‌های واحد بومی تبدیل می‌کنند. این قابلیت نباید در واحدهای معمولی استفاده شود.

افزوده‌شده در نسخه ۲۰۱.

فایل‌های واحد ممکن است شامل تعدادی از تنظیمات Condition...= و Assert...= باشند. قبل از شروع واحد، systemd بررسی می‌کند که آیا شرایط و ارزیابی‌های مشخص‌شده برقرار هستند یا خیر. در غیر این صورت، راه‌اندازی واحد (عمدتاً بی‌صدا) نادیده گرفته می‌شود (در مورد شرایط)، یا با یک پیام خطا لغو می‌شود (در مورد ارزیابی‌ها). شرایط یا ارزیابی‌های ناموفق منجر به انتقال واحد به وضعیت "failed" نمی‌شوند. شرایط و ارزیابی‌ها در زمانی که کار راه‌اندازیِ در صف قرار گرفته قرار است اجرا شود، بررسی می‌شوند. وابستگی‌های ترتیبی همچنان رعایت می‌شوند، بنابراین سایر واحدها همچنان فراخوانی شده و مرتب می‌شوند به گونه‌ای که گویی این واحد با موفقیت فعال شده است، و شرایط و ارزیابی‌ها دقیقاً در همان لحظه‌ای اجرا می‌شوند که واحد به طور معمول راه‌اندازی می‌شد و بنابراین می‌توانند وضعیت سیستم را پس از تکمیل مقداردهی اولیه واحدهایی که قبل از آن مرتب شده‌اند، اعتبارسنجی کنند. از عبارت‌های شرطی برای نادیده گرفتن واحدهایی که برای سیستم محلی اعمال نمی‌شوند، استفاده کنید؛ به عنوان مثال به این دلیل که هسته یا محیط زمان اجرا به عملکرد آن‌ها نیازی ندارد.

اگر چندین شرط مشخص شده باشد، واحد در صورتی اجرا می‌شود که همه آن‌ها اعمال شوند (یعنی یک AND منطقی اعمال می‌شود). بررسی‌های شرط می‌توانند از یک علامت خط عمودی ("|") بعد از علامت مساوی ("Condition...=|...") استفاده کنند که باعث می‌شود شرط به یک شرط محرک (triggering) تبدیل شود. اگر حداقل یک شرط محرک برای یک واحد تعریف شده باشد، در این صورت اگر حداقل یکی از شرایط محرک واحد برقرار باشد و تمام شرایط عادی (یعنی غیرمحرک) برقرار باشند، واحد راه‌اندازی خواهد شد. اگر پیشوند یک آرگومان را با نماد لوله و یک علامت تعجب قرار دهید، نماد لوله باید اول و علامت تعجب دوم باشد. اگر به هر یک از این گزینه‌ها رشته خالی اختصاص داده شود، فهرست شرایط به طور کامل بازنشانی می‌شود و تمام تنظیمات قبلی شرط (از هر نوع) بی‌اثر خواهند بود.

گزینه‌های AssertArchitecture=، AssertVirtualization=، ... مشابه شرایط هستند اما باعث می‌شوند کار راه‌اندازی با شکست مواجه شود (به جای نادیده گرفته شدن). بررسی ناموفق در گزارش ثبت می‌شود. واحدهایی با شرایط برآورده‌نشده در وضعیت تمیز در نظر گرفته می‌شوند و در صورت عدم ارجاع، زباله‌روبی خواهند شد. این بدان معناست که در صورت استعلام، عدم برآورده شدن شرط ممکن است در وضعیت واحد نشان داده شود یا نشود.

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

از فعل condition در دستور systemd-analyze(1) می‌توان برای آزمایش عبارات شرطی و ارزیابی استفاده کرد.

به جز ConditionPathIsSymbolicLink=، تمام بررسی‌های مسیر، پیوندهای نمادین را دنبال می‌کنند.

ConditionArchitecture=

بررسی می‌کند که آیا سیستم روی معماری خاصی در حال اجرا است یا خیر. یکی از مقادیر زیر را می‌گیرد: "x86"، "x86-64"، "ppc"، "ppc-le"، "ppc64"، "ppc64-le"، "ia64"، "parisc"، "parisc64"، "s390"، "s390x"، "sparc"، "sparc64"، "mips"، "mips-le"، "mips64"، "mips64-le"، "alpha"، "arm"، "arm-be"، "arm64"، "arm64-be"، "sh"، "sh64"، "m68k"، "tilegx"، "cris"، "arc"، "arc-be"، یا "native".

برای فهرست کامل معماری‌های شناخته‌شده از systemd-analyze(1) استفاده کنید.

معماری از اطلاعات بازگردانده‌شده توسط uname(2) تعیین می‌شود و بنابراین تابع personality(2) است. توجه داشته باشید که تنظیم Personality= در همان فایل واحد هیچ تأثیری بر این شرط ندارد. نام معماری ویژه "native" به معماری که خود مدیر سیستم برای آن کامپایل شده است، نگاشت می‌شود. آزمون را می‌توان با قرار دادن یک علامت تعجب در ابتدا نفی کرد.

افزوده‌شده در نسخه ۲۰۱.

ConditionFirmware=

بررسی می‌کند که آیا سفت‌افزار (firmware) سیستم از نوع خاصی است یا خیر. مقادیر زیر ممکن است:
•"uefi" با سیستم‌های دارای EFI مطابقت دارد.
•"device-tree" با سیستم‌های دارای درخت دستگاه (Device Tree) مطابقت دارد.
•"device-tree-compatible(value)" با سیستم‌های دارای درخت دستگاه که با "value" سازگار هستند، مطابقت دارد.
•"smbios-field(field operator value)" با سیستم‌هایی با یک فیلد SMBIOS حاوی یک مقدار خاص مطابقت دارد. field نام فیلد SMBIOS است که به عنوان فایل ویژگی "sysfs" در زیر /sys/class/dmi/id/ نمایش داده می‌شود. operator یکی از موارد "<"، "<="، ">="، ">"، "=="، "<>" برای مقایسه نسخه، "=" و "!=" برای مقایسه تحت‌اللفظی رشته، یا "$="، "!$=" برای مقایسه‌های عمومی (glob) به سبک پوسته است. value مقدار مورد انتظار فیلد SMBIOS است (احتمالاً حاوی الگوهای glob به سبک پوسته در صورتی که از "$="/"!$=" استفاده شود).

افزوده‌شده در نسخه ۲۴۹.

ConditionVirtualization=

بررسی می‌کند که آیا سیستم در یک محیط مجازی‌سازی‌شده اجرا می‌شود یا خیر و به صورت اختیاری آزمایش می‌کند که آیا پیاده‌سازی خاصی است یا خیر. یک مقدار بولی برای بررسی اجرا در هر محیط مجازی‌سازی‌شده، یا یکی از موارد "vm" و "container" برای آزمایش در برابر نوع عمومی راه‌حل مجازی‌سازی، یا یکی از موارد "qemu"، "kvm"، "amazon"، "zvm"، "vmware"، "microsoft"، "oracle"، "powervm"، "xen"، "bochs"، "uml"، "bhyve"، "qnx"، "apple"، "sre"، "openvz"، "lxc"، "lxc-libvirt"، "systemd-nspawn"، "docker"، "podman"، "rkt"، "wsl"، "proot"، "pouch"، "acrn" برای آزمایش در برابر یک پیاده‌سازی خاص، یا "private-users" برای بررسی اینکه آیا در فضای نام کاربری اجرا می‌شویم یا خیر، می‌پذیرد. برای فهرست کامل فناوری‌های مجازی‌سازی شناخته‌شده و شناسه‌های آن‌ها، systemd-detect-virt(1) را ببینید. اگر چندین فناوری مجازی‌سازی تودرتو باشند، تنها درونی‌ترین مورد در نظر گرفته می‌شود. آزمون را می‌توان با قرار دادن علامت تعجب در ابتدا نفی کرد.

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

ConditionHost=

ConditionHost= ممکن است برای تطبیق با نام میزبان (hostname) یا شناسه ماشین (machine ID) میزبان استفاده شود. این گزینه یا یک رشته نام میزبان (به صورت اختیاری با الگوهای عمومی پوسته) می‌گیرد که با نام میزبان محلی تنظیم‌شده بازگردانده‌شده توسط gethostname(2) آزمایش می‌شود، یا یک شناسه ماشین قالب‌بندی‌شده به عنوان رشته (به machine-id(5) مراجعه کنید). آزمون را می‌توان با افزودن یک علامت تعجب در ابتدا نفی کرد.

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

ConditionKernelCommandLine=

ConditionKernelCommandLine= ممکن است برای بررسی اینکه آیا یک گزینه خط فرمان هسته خاص تنظیم شده است (یا اگر با علامت تعجب شروع شود — تنظیم نشده است) استفاده شود. آرگومان باید یا یک کلمه منفرد باشد یا یک انتساب (یعنی دو کلمه که با "=" جدا شده‌اند). در حالت اول، خط فرمان هسته برای کلمه‌ای که همان‌طور که هست یا به عنوان سمت چپ یک انتساب ظاهر می‌شود جستجو می‌شود. در حالت دوم، انتساب دقیق با تطبیق سمت راست و چپ جستجو می‌شود. این روی خط فرمان هسته منتقل‌شده به فضای کاربری از طریق /proc/cmdline عمل می‌کند، به جز زمانی که مدیر سرویس به عنوان بار مفید یک مدیر کانتینر فراخوانی شود، که در این صورت خط فرمان PID 1 به جای آن استفاده می‌شود (یعنی /proc/1/cmdline).

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

ConditionKernelVersion=

ConditionKernelVersion= ممکن است برای بررسی اینکه آیا نسخه هسته (همان‌طور که توسط uname -r گزارش شده است) با یک عبارت خاص مطابقت دارد یا خیر، یا در صورت پیشوند بودن با علامت تعجب، مطابقت ندارد، استفاده شود. آرگومان باید فهرستی از عبارات (احتمالاً درون گیومه) باشد. هر عبارت با یکی از موارد "=" یا "!=" برای مقایسه رشته‌ای، "<"، "<="، "=="، "<>"، ">="، ">" برای مقایسه نسخه، یا "$="، "!$=" برای تطبیق الگوی عمومی به سبک پوسته شروع می‌شود. اگر عملگری مشخص نشده باشد، "$=" در نظر گرفته می‌شود.

توجه داشته باشید که استفاده از رشته نسخه هسته روشی غیرقابل اعتماد برای تعیین ویژگی‌های پشتیبانی‌شده توسط یک هسته است، زیرا این عمل گسترده وجود دارد که درایورها، ویژگی‌ها و اصلاحات را از هسته‌های بالادستی جدیدتر به نسخه‌های قدیمی‌تر ارائه‌شده توسط توزیع‌ها منتقل (backport) می‌کنند. از این رو، این بررسی ذکراً غیرقابل حمل است و نباید برای واحدهایی که ممکن است در توزیع‌های مختلف استفاده شوند به کار رود.

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

ConditionCredential=

ConditionCredential= ممکن است برای بررسی اینکه آیا اعتباری (credential) با نام مشخص‌شده به مدیر سرویس ارسال شده است یا خیر، استفاده شود. برای جزئیات در مورد اعتبارات، اعتبارات سیستم و سرویس[4] را ببینید. اگر در سرویس‌ها برای مدیر سرویس سیستم استفاده شود، ممکن است برای شرطی کردن سرویس‌ها بر اساس اعتبارات سیستم ارسال‌شده استفاده شود. اگر در سرویس‌ها برای مدیر سرویس به ازای هر کاربر استفاده شود، ممکن است برای شرطی کردن سرویس‌ها بر اساس اعتبارات ارسال‌شده به نمونه سرویس unit@.service متعلق به کاربر استفاده شود. آرگومان باید یک نام اعتبار معتبر باشد.

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

ConditionEnvironment=

ConditionEnvironment= ممکن است برای بررسی اینکه آیا یک متغیر محیطی خاص در بلوک محیط مدیر سرویس تنظیم شده است (یا در صورت پیشوند بودن با علامت تعجب — تنظیم نشده است) استفاده شود. آرگومان ممکن است یک کلمه منفرد باشد تا بررسی کند که آیا متغیری با این نام در بلوک محیط تعریف شده است یا خیر، یا یک انتساب ("name=value") برای بررسی اینکه آیا متغیر با این مقدار دقیق تعریف شده است یا خیر. توجه داشته باشید که بلوک محیط خود مدیر سرویس بررسی می‌شود، یعنی نه متغیرهای تعریف‌شده با Environment= یا EnvironmentFile=، همان‌طور که در بالا توضیح داده شد. این به ویژه زمانی مفید است که مدیر سرویس در داخل یک محیط کانتینری یا به عنوان مدیر سرویس به ازای هر کاربر اجرا می‌شود، تا متغیرهای ارسال‌شده توسط مدیر کانتینر محصورکننده یا PAM را بررسی کند.

افزوده‌شده در نسخه ۲۴۶.

ConditionSecurity=

ConditionSecurity= ممکن است برای بررسی اینکه آیا فناوری امنیتی داده‌شده در سیستم فعال است یا خیر، استفاده شود. در حال حاضر مقادیر زیر شناسایی می‌شوند:

جدول ۳. فناوری‌های امنیتی شناسایی‌شده

مقدار توضیحات
selinux کنترل دسترسی اجباری SELinux
apparmor کنترل دسترسی اجباری AppArmor
tomoyo کنترل دسترسی اجباری Tomoyo
smack کنترل دسترسی اجباری SMACK
ima معماری اندازه‌گیری یکپارچگی (IMA)
audit چارچوب ممیزی لینوکس (Linux Audit Framework)
uefi-secureboot راه‌اندازی امن UEFI (UEFI SecureBoot)
tpm2 ماژول پلتفرم قابل اعتماد نسخه ۲.۰ (TPM2)
cvm ماشین مجازی محرمانه (SEV/TDX)
measured-uki تصویر هسته یکپارچه با اندازه‌گیری‌های PCR 11، طبق systemd-stub(7). افزوده‌شده در نسخه ۲۵۵.

آزمون را می‌توان با قرار دادن علامت تعجب در ابتدا نفی کرد.

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

ConditionCapability=

بررسی می‌کند که آیا قابلیت (capability) داده‌شده در مجموعه مرزی قابلیت‌های مدیر سرویس وجود دارد یا خیر (یعنی بررسی نمی‌کند که آیا قابلیت در مجموعه‌های مجاز یا مؤثر در دسترس است یا خیر، برای جزئیات capabilities(7) را ببینید). یک نام قابلیت مانند "CAP_MKNOD" را ارسال کنید، که احتمالاً با علامت تعجب برای نفی بررسی همراه است.

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

ConditionACPower=

بررسی می‌کند که آیا سیستم دارای برق متناوب شهری (AC) است یا در زمان فعال‌سازی واحد منحصراً با باتری کار می‌کند. این گزینه یک آرگومان بولی می‌گیرد. اگر روی "true" تنظیم شود، شرط تنها در صورتی برقرار خواهد بود که حداقل یک رابط AC سیستم به منبع برق متصل باشد، یا هیچ رابط AC شناخته‌شده‌ای وجود نداشته باشد. برعکس، اگر روی "false" تنظیم شود، شرط تنها در صورتی برقرار خواهد بود که حداقل یک رابط AC شناخته‌شده وجود داشته باشد و تمام رابط‌های AC از منبع برق قطع شده باشند.

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

ConditionNeedsUpdate=

یکی از مقادیر /var/ یا /etc/ را به عنوان آرگومان می‌گیرد، که احتمالاً با یک "!" (برای معکوس کردن شرط) همراه است. این شرط ممکن است برای مشروط کردن واحدها بر این اساس استفاده شود که آیا دایرکتوری مشخص‌شده نیاز به به‌روزرسانی دارد زیرا زمان تغییر /usr/ جدیدتر از فایل نشانگر .updated در دایرکتوری مشخص‌شده است یا خیر. این برای پیاده‌سازی به‌روزرسانی‌های آفلاین منابع سیستم‌عامل ارائه‌دهنده در /usr/ مفید است که در راه‌اندازی بعدی نیاز به به‌روزرسانی /etc/ یا /var/ دارند. واحدهایی که از این شرط استفاده می‌کنند باید خود را قبل از systemd-update-done.service(8) مرتب کنند تا مطمئن شوند قبل از بازنشانی زمان تغییر فایل نشانگر که نشان‌دهنده یک به‌روزرسانی کامل‌شده است، اجرا می‌شوند.

اگر گزینه systemd.condition_needs_update= در خط فرمان هسته مشخص شده باشد (با مقدار بولی)، نتیجه این بررسی شرط را بازنویسی می‌کند و بر هرگونه بررسی زمان تغییر فایل اولویت دارد. اگر از گزینه خط فرمان هسته استفاده شود، systemd-update-done.service تأثیر فوری بر بررسی‌های بعدی ConditionNeedsUpdate= نخواهد داشت، تا زمانی که سیستم مجدداً راه‌اندازی شود که در آن گزینه خط فرمان هسته دیگر مشخص نشده باشد.

توجه داشته باشید برای اینکه این طرح مؤثر باشد، برچسب زمانی /usr/ باید پس از تغییر محتویات آن به صراحت به‌روزرسانی شود. هسته فقط زمانی برچسب زمانی تغییر را در یک دایرکتوری به طور خودکار به‌روزرسانی می‌کند که فرزندان فوری یک دایرکتوری تغییر کنند؛ تغییر فایل‌های تودرتو به طور خودکار منجر به به‌روزرسانی mtime در /usr/ نمی‌شود.

همچنین توجه داشته باشید که اگر روش به‌روزرسانی شامل فراخوانی برای اجرای مراحل مناسب پس از به‌روزرسانی باشد، نباید برچسب زمانی /usr/ را تغییر دهد. در یک طرح معمول بسته‌بندی توزیع، بسته‌ها هر مرحله به‌روزرسانی لازم را به عنوان بخشی از نصب یا ارتقا انجام می‌دهند تا محتویات بسته بلافاصله قابل استفاده باشد. ConditionNeedsUpdate= باید با سایر مکانیسم‌های به‌روزرسانی استفاده شود که در آن‌ها چنین به‌روزرسانی فوری رخ نمی‌دهد.

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

ConditionFirstBoot=

یک آرگومان بولی می‌گیرد. این شرط ممکن است برای مشروط کردن واحدها بر این اساس استفاده شود که آیا سیستم برای اولین بار راه‌اندازی می‌شود یا خیر. این تقریباً به این معنی است که وقتی سیستم شروع به راه‌اندازی کرد، /etc/ خالی بوده است (برای جزئیات، به "First Boot Semantics" در machine-id(5) مراجعه کنید). بوت اولیه پس از اینکه مدیر مرحله راه‌اندازی را به پایان رساند، پایان‌یافته تلقی می‌شود (این شرط به عنوان نادرست ارزیابی خواهد شد).

این شرط ممکن است برای پر کردن /etc/ در اولین راه‌اندازی پس از بازنشانی به تنظیمات کارخانه، یا هنگامی که یک نمونه سیستم جدید برای اولین بار راه‌اندازی می‌شود، استفاده شود.

توجه داشته باشید که خود مدیر سرویس مراحل راه‌اندازی را در طول اولین راه‌اندازی انجام می‌دهد: machine-id(5) را مقداردهی اولیه کرده و تمام واحدها را از پیش تنظیم (preset) می‌کند و آن‌ها را طبق تنظیمات systemd.preset(5) فعال یا غیرفعال می‌سازد. راه‌اندازی اضافی ممکن است از طریق واحدهایی با ConditionFirstBoot=yes انجام شود.

برای پایداری، واحدهایی با ConditionFirstBoot=yes باید خود را قبل از first-boot-complete.target مرتب کرده و این هدف غیرفعال را با Wants= به همراه بیاورند. این تضمین می‌کند که در صورت لغو اولین راه‌اندازی، این واحدها در طول راه‌اندازی بعدی سیستم مجدداً اجرا خواهند شد.

اگر گزینه systemd.condition_first_boot= در خط فرمان هسته مشخص شده باشد (با مقدار بولی)، نتیجه این بررسی شرط را بازنویسی می‌کند و بر بررسی‌های وجود /etc/machine-id اولویت دارد.

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

ConditionPathExists=

وجود یک فایل را بررسی می‌کند. اگر نام مسیر مطلق مشخص‌شده وجود نداشته باشد، شرط ناموفق خواهد بود. اگر نام مسیر مطلق ارسال‌شده به ConditionPathExists= با علامت تعجب ("!") شروع شود، آزمون نفی می‌شود و واحد تنها در صورتی راه‌اندازی می‌شود که مسیر وجود نداشته باشد.

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

ConditionPathExistsGlob=

ConditionPathExistsGlob= مشابه ConditionPathExists= است، اما وجود حداقل یک فایل یا دایرکتوری مطابق با الگوی glob مشخص‌شده را بررسی می‌کند.

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

ConditionPathIsDirectory=

ConditionPathIsDirectory= مشابه ConditionPathExists= است اما تأیید می‌کند که یک مسیر مشخص وجود دارد و یک دایرکتوری است.

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

ConditionPathIsSymbolicLink=

ConditionPathIsSymbolicLink= مشابه ConditionPathExists= است اما تأیید می‌کند که یک مسیر مشخص وجود دارد و یک پیوند نمادین است.

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

ConditionPathIsMountPoint=

ConditionPathIsMountPoint= مشابه ConditionPathExists= است اما تأیید می‌کند که یک مسیر مشخص وجود دارد و یک نقطه اتصال (mount point) است.

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

ConditionPathIsReadWrite=

ConditionPathIsReadWrite= مشابه ConditionPathExists= است اما تأیید می‌کند که سیستم فایل زیربنایی قابل خواندن و نوشتن است (یعنی به صورت فقط‌خواندنی متصل نشده است).

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

ConditionPathIsEncrypted=

ConditionPathIsEncrypted= مشابه ConditionPathExists= است اما بررسی می‌کند که آیا دستگاه بلوکی پشتیبان سیستم فایل زیربنایی با استفاده از dm-crypt/LUKS رمزگذاری شده است یا خیر. توجه داشته باشید که این بررسی رمزگذاری به ازای هر دایرکتوری ext4 را پوشش نمی‌دهد و فقط رمزگذاری در سطح بلوک را تشخیص می‌دهد. علاوه بر این، اگر مسیر مشخص‌شده در یک سیستم فایل روی یک دستگاه بلوکی loopback قرار داشته باشد، فقط رمزگذاری بالای دستگاه loopback تشخیص داده می‌شود. این موضوع که آیا سیستم فایل پشتیبان دستگاه بلوکی loopback رمزگذاری شده است یا خیر، تشخیص داده نمی‌شود.

افزوده‌شده در نسخه ۲۴۶.

ConditionDirectoryNotEmpty=

ConditionDirectoryNotEmpty= مشابه ConditionPathExists= است اما تأیید می‌کند که یک مسیر مشخص وجود دارد و یک دایرکتوری غیرخالی است.

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

ConditionFileNotEmpty=

ConditionFileNotEmpty= مشابه ConditionPathExists= است اما تأیید می‌کند که یک مسیر مشخص وجود دارد و به یک فایل معمولی با اندازه غیرصفر اشاره می‌کند.

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

ConditionFileIsExecutable=

ConditionFileIsExecutable= مشابه ConditionPathExists= است اما تأیید می‌کند که یک مسیر مشخص وجود دارد، یک فایل معمولی است و به عنوان قابل اجرا علامت‌گذاری شده است.

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

ConditionUser=

ConditionUser= یک "UID" عددی، یک نام کاربری یونیکس، یا مقدار ویژه "@system" را می‌گیرد. از این شرط می‌توان برای بررسی اینکه آیا مدیر سرویس به عنوان کاربر داده‌شده در حال اجرا است یا خیر، استفاده کرد. مقدار ویژه "@system" می‌تواند برای بررسی اینکه آیا شناسه کاربر در محدوده کاربر سیستم قرار دارد یا خیر، استفاده شود. این گزینه برای سرویس‌های سیستمی مفید نیست، زیرا مدیر سیستم منحصراً به عنوان کاربر root اجرا می‌شود و بنابراین نتیجه آزمون ثابت است.

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

ConditionGroup=

ConditionGroup= مشابه ConditionUser= است اما بررسی می‌کند که آیا گروه واقعی یا مؤثر مدیر سرویس، یا هر یک از گروه‌های کمکی آن، با گروه یا GID مشخص‌شده مطابقت دارد یا خیر. این تنظیم از مقدار ویژه "@system" پشتیبانی نمی‌کند.

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

ConditionControlGroupController=

بررسی می‌کند که آیا کنترل‌کننده‌های cgroup داده‌شده (مثلاً "cpu") برای استفاده در سیستم در دسترس هستند یا اینکه آیا از سلسله‌مراتب موروثی v1 cgroup یا سلسله‌مراتب مدرن v2 cgroup استفاده می‌شود.

چندین کنترل‌کننده را می‌توان با فاصله جداکننده ارسال کرد؛ در این حالت، شرط تنها در صورتی پذیرفته می‌شود که تمام کنترل‌کننده‌های فهرست‌شده برای استفاده در دسترس باشند. کنترل‌کننده‌های ناشناخته برای systemd نادیده گرفته می‌شوند. کنترل‌کننده‌های معتبر عبارتند از "cpu"، "io"، "memory" و "pids". حتی اگر در هسته در دسترس باشد، اگر یک کنترل‌کننده خاص در خط فرمان هسته با cgroup_disable=controller غیرفعال شده باشد، ممکن است در دسترس نباشد.

به عنوان روشی جایگزین، دو رشته ویژه "v1" و "v2" ممکن است مشخص شوند (بدون هیچ نام کنترل‌کننده‌ای). "v2" در صورتی که از سلسله‌مراتب یکپارچه v2 cgroup استفاده شود قبول خواهد شد، و "v1" در صورتی که از سلسله‌مراتب موروثی v1 یا سلسله‌مراتب ترکیبی استفاده شود پذیرفته می‌شود. توجه داشته باشید که سلسله‌مراتب‌های موروثی یا ترکیبی منسوخ شده‌اند. برای اطلاعات بیشتر systemd(1) را ببینید.

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

ConditionMemory=

تأیید می‌کند که مقدار مشخص‌شده حافظه سیستم در دسترس سیستم فعلی است. اندازه حافظه را بر حسب بایت به عنوان آرگومان می‌گیرد، که احتمالاً با یک عملگر مقایسه "<"، "<="، "=" (یا "==")، "!=" (یا "<>")، ">="، ">" همراه است. در سیستم‌های فیزیکی، مقدار حافظه فیزیکی در سیستم را با اندازه مشخص‌شده مقایسه می‌کند و به عملگر مقایسه مشخص‌شده پایبند است. در کانتینرها به جای آن مقدار حافظه اختصاص‌داده‌شده به کانتینر را مقایسه می‌کند.

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

ConditionCPUs=

تأیید می‌کند که تعداد مشخص‌شده CPU در دسترس سیستم فعلی است. تعداد CPUها را به عنوان آرگومان می‌گیرد، که به صورت اختیاری با یک عملگر مقایسه "<"، "<="، "=" (یا "==")، "!=" (یا "<>")، ">="، ">" همراه است. تعداد CPUهای موجود در ماسک وابستگی CPU پیکربندی‌شده خود مدیر سرویس را با عدد مشخص‌شده مقایسه می‌کند و به عملگر مقایسه پایبند است. در سیستم‌های فیزیکی، تعداد CPUها در ماسک وابستگی مدیر سرویس معمولاً با تعداد CPUهای فیزیکی مطابقت دارد، اما در محیط‌های خاص و مجازی ممکن است متفاوت باشد. به ویژه، در کانتینرها ماسک وابستگی معمولاً با تعداد CPUهای اختصاص داده شده به کانتینر مطابقت دارد و نه CPUهای موجود از نظر فیزیکی.

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

ConditionCPUFeature=

تأیید می‌کند که یک ویژگی CPU داده‌شده از طریق دستورالعمل "CPUID" در دسترس است. این شرط فقط در پردازنده‌های i386 و x86-64 کاری انجام می‌دهد. در سایر پردازنده‌ها فرض می‌شود که CPU از ویژگی داده‌شده پشتیبانی نمی‌کند. برگ‌های "1"، "7"، "0x80000001" و "0x80000007" را بررسی می‌کند. مقادیر معتبر عبارتند از: "fpu"، "vme"، "de"، "pse"، "tsc"، "msr"، "pae"، "mce"، "cx8"، "apic"، "sep"، "mtrr"، "pge"، "mca"، "cmov"، "pat"، "pse36"، "clflush"، "mmx"، "fxsr"، "sse"، "sse2"، "ht"، "pni"، "pclmul"، "monitor"، "ssse3"، "fma3"، "cx16"، "sse4_1"، "sse4_2"، "movbe"، "popcnt"، "aes"، "xsave"، "osxsave"، "avx"، "f16c"، "rdrand"، "bmi1"، "avx2"، "bmi2"، "rdseed"، "adx"، "sha_ni"، "syscall"، "rdtscp"، "lm"، "lahf_lm"، "abm"، "constant_tsc".

افزوده‌شده در نسخه ۲۴۸.

ConditionOSRelease=

تأیید می‌کند که یک جفت "key=value" خاص در فایل os-release(5) میزبان تنظیم شده است.

به غیر از تطبیق دقیق رشته (با "=" و "!=")، مقایسه‌های نسبی برای پارامترهای نسخه‌دار پشتیبانی می‌شوند (مثلاً "VERSION_ID"؛ با "<"، "<="، "=="، "<>"، ">="، ">")، و مقایسه‌های عمومی به سبک پوسته ("*"، "?"، "[]") با "$=" (تطبیق) و "!$=" (عدم تطبیق) پشتیبانی می‌شوند.

اگر کلید داده‌شده در فایل یافت نشود، تطبیق در برابر یک مقدار خالی انجام می‌شود.

افزوده‌شده در نسخه ۲۴۹.

ConditionMemoryPressure=, ConditionCPUPressure=, ConditionIOPressure=

تأیید می‌کند که فشار کلی سیستم (حافظه، CPU یا ورودی/خروجی) کمتر یا مساوی یک آستانه است. این تنظیم یک مقدار آستانه را به عنوان آرگومان می‌گیرد. می‌توان آن را به عنوان یک مقدار درصد ساده مشخص کرد، که با "%" همراه است، که در این صورت فشار به عنوان میانگین در پنج دقیقه گذشته قبل از انجام تلاش برای راه‌اندازی واحد اندازه‌گیری می‌شود. از طرف دیگر، بازه زمانی میانگین را می‌توان با استفاده از "/" به عنوان جداکننده نیز مشخص کرد، به عنوان مثال: "10%/1min". بازه‌های زمانی پشتیبانی‌شده با آنچه هسته فراهم می‌کند مطابقت دارد و به "10sec"، "1min" و "5min" محدود می‌شود. ابتدا PSI نوع "full" بررسی می‌شود و در صورت یافت نشدن، "some" بررسی خواهد شد. برای جزئیات بیشتر، مستندات مربوط به PSI (اطلاعات توقف تحت فشار)[5] را ببینید.

به صورت اختیاری، مقدار آستانه می‌تواند با واحد slice که تحت آن فشار بررسی می‌شود، و به دنبال آن یک ":" پیشوند شود. اگر واحد slice مشخص نشده باشد، فشار کلی سیستم به جای یک cgroup خاص اندازه‌گیری می‌شود.

افزوده‌شده در نسخه ۲۵۰.

AssertArchitecture=, AssertVirtualization=, AssertHost=, AssertKernelCommandLine=, AssertKernelVersion=, AssertCredential=, AssertEnvironment=, AssertSecurity=, AssertCapability=, AssertACPower=, AssertNeedsUpdate=, AssertFirstBoot=, AssertPathExists=, AssertPathExistsGlob=, AssertPathIsDirectory=, AssertPathIsSymbolicLink=, AssertPathIsMountPoint=, AssertPathIsReadWrite=, AssertPathIsEncrypted=, AssertDirectoryNotEmpty=, AssertFileNotEmpty=, AssertFileIsExecutable=, AssertUser=, AssertGroup=, AssertControlGroupController=, AssertMemory=, AssertCPUs=, AssertCPUFeature=, AssertOSRelease=, AssertMemoryPressure=, AssertCPUPressure=, AssertIOPressure=

مشابه تنظیمات شرطی ConditionArchitecture=، ConditionVirtualization=، ... که در بالا توضیح داده شد، این تنظیمات بررسی‌های ارزیابی (assertion) را به راه‌اندازی واحد اضافه می‌کنند. با این حال، بر خلاف تنظیمات شرایط، هر تنظیم ارزیابی که برآورده نشود منجر به شکست کار راه‌اندازی می‌شود (که به این معنی است که این موضوع به وضوح در گزارش‌ها ثبت می‌شود). توجه داشته باشید که برخورد با یک ارزیابی پیکربندی‌شده باعث نمی‌شود که واحد وارد وضعیت "failed" شود (یا در واقع منجر به هرگونه تغییر وضعیت واحد شود)، بلکه فقط بر کاری که برای آن در صف قرار گرفته است تأثیر می‌گذارد. از عبارت‌های ارزیابی برای واحدهایی استفاده کنید که وقتی نیازمندی‌های خاص برآورده نمی‌شوند نمی‌توانند کار کنند، و زمانی که این چیزی است که مدیر سیستم یا کاربر باید آن را بررسی کند.

افزوده‌شده در نسخه ۲۱۸.

تنظیمات واحد که با یک واحد دوم رابطه ایجاد می‌کنند معمولاً در ویژگی‌های هر دو واحد نشان داده می‌شوند، به عنوان مثال در خروجی systemctl show. در برخی موارد نام ویژگی با نام تنظیمات پیکربندی یکسان است، اما نه همیشه. این جدول ویژگی‌هایی را که روی دو واحد متصل به یکدیگر از طریق نوعی وابستگی نشان داده می‌شوند فهرست می‌کند، و نشان می‌دهد که کدام ویژگی در واحد «مبدأ» با کدام ویژگی در واحد «مقصد» مطابقت دارد.

جدول ۴.  ویژگی‌های «مستقیم» و «معکوس» واحد

ویژگی «پیشرو» (Forward) ویژگی «معکوس» (Reverse) محل استفاده
Before= After= بخش [Unit]
After= Before=
Requires= RequiredBy= بخش [Unit] بخش [Install]
Wants= WantedBy= بخش [Unit] بخش [Install]
Upholds= UpheldBy= بخش [Unit] بخش [Install]
PartOf= ConsistsOf= بخش [Unit] یک ویژگی خودکار
BindsTo= BoundBy= بخش [Unit] یک ویژگی خودکار
Requisite= RequisiteOf= بخش [Unit] یک ویژگی خودکار
Conflicts= ConflictedBy= بخش [Unit] یک ویژگی خودکار
Triggers= TriggeredBy= Automatic properties, see notes below
PropagatesReloadTo= ReloadPropagatedFrom= بخش [Unit]
ReloadPropagatedFrom= PropagatesReloadTo=
PropagatesStopTo= StopPropagatedFrom= بخش [Unit]
StopPropagatedFrom= PropagatesStopTo=
Following= ناموجود/نامربوط (n/a) An automatic property  

Note:
WantedBy=, RequiredBy=, and UpheldBy= are used in the بخش [Install] to create symlinks in .wants/, .requires/, and .upholds/ directories. They cannot be used directly as a unit configuration setting.

Note: ConsistsOf=, BoundBy=, RequisiteOf=, ConflictedBy= are created implicitly along with their reverses and cannot be specified directly.

Note: Triggers= is created implicitly between a socket, path unit, or an automount unit, and the unit they activate. By default, a unit with the same name is triggered, but this can be overridden using Sockets=, Service=, and Unit= settings. See systemd.service(5), systemd.socket(5), systemd.path(5), and systemd.automount(5) for details. TriggeredBy= is created implicitly on the triggered unit.

Note: Following= is used to group device aliases and points to the "primary" device unit that systemd is using to track device state, usually corresponding to a sysfs path. It does not show up in the "target" unit.

Unit files may include an بخش [Install], which carries installation information for the unit. This section is not interpreted by systemd(1) during runtime; it is used by the enable and disable commands of the systemctl(1) tool during installation of a unit.

Alias=

A space-separated list of additional names this unit shall be installed under. The names listed here must have the same suffix (i.e. type) as the unit filename. This option may be specified more than once, in which case all listed names are used. At installation time, systemctl enable will create symlinks from these names to the unit filename. Note that not all unit types support such alias names, and this setting is not supported for them. Specifically, mount, slice, swap, and automount units do not support aliasing.

Added in version 201.

WantedBy=, RequiredBy=, UpheldBy=

This option may be used more than once, or a space-separated list of unit names may be given. A symbolic link is created in the .wants/, .requires/, or .upholds/ directory of each of the listed units when this unit is installed by systemctl enable. This has the effect of a dependency of type Wants=, Requires=, or Upholds= being added from the listed unit to the current unit. See the description of the mentioned dependency types in the بخش [Unit] for details.

In case of template units listing non template units, the listing unit must have DefaultInstance= set, or systemctl enable must be called with an instance name. The instance (default or specified) will be added to the .wants/, .requires/, or .upholds/ list of the listed unit. For example, WantedBy=getty.target in a service getty@.service will result in systemctl enable getty@tty2.service creating a getty.target.wants/getty@tty2.service link to getty@.service. This also applies to listing specific instances of templated units: this specific instance will gain the dependency. A template unit may also list a template unit, in which case a generic dependency will be added where each instance of the listing unit will have a dependency on an instance of the listed template with the same instance value. For example, WantedBy=container@.target in a service monitor@.service will result in systemctl enable monitor@.service creating a container@.target.wants/monitor@.service link to monitor@.service, which applies to all instances of container@.target.

Added in version 201.

Also=

Additional units to install/deinstall when this unit is installed/deinstalled. If the user requests installation/deinstallation of a unit with this option configured, systemctl enable and systemctl disable will automatically install/uninstall units listed in this option as well.

This option may be used more than once, or a space-separated list of unit names may be given.

Added in version 201.

DefaultInstance= allbox tab(:); lB lB lB s. T{ "Forward" property T}:T{ "Reverse" property T}:T{ Where used T} l l l s l l ^ ^ l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l s l l l s l l ^ ^ l l l s l l ^ ^ l l l l. T{ Before= T}:T{ After= T}:T{ [Unit] section T} T{ After= T}:T{ Before= T}:: T{ Requires= T}:T{ RequiredBy= T}:T{ [Unit] section T}:T{ [Install] section T} T{ Wants= T}:T{ WantedBy= T}:T{ [Unit] section T}:T{ [Install] section T} T{ Upholds= T}:T{ UpheldBy= T}:T{ [Unit] section T}:T{ [Install] section T} T{ PartOf= T}:T{ ConsistsOf= T}:T{ [Unit] section T}:T{ an automatic property T} T{ BindsTo= T}:T{ BoundBy= T}:T{ [Unit] section T}:T{ an automatic property T} T{ Requisite= T}:T{ RequisiteOf= T}:T{ [Unit] section T}:T{ an automatic property T} T{ Conflicts= T}:T{ ConflictedBy= T}:T{ [Unit] section T}:T{ an automatic property T} T{ Triggers= T}:T{ TriggeredBy= T}:T{ Automatic properties, see notes below T} T{ PropagatesReloadTo= T}:T{ ReloadPropagatedFrom= T}:T{ [Unit] section T} T{ ReloadPropagatedFrom= T}:T{ PropagatesReloadTo= T}:: T{ PropagatesStopTo= T}:T{ StopPropagatedFrom= T}:T{ [Unit] section T} T{ StopPropagatedFrom= T}:T{ PropagatesStopTo= T}:: T{ Following= T}:T{ n/a T}:T{ An automatic property T}:T{   T}

Note: WantedBy=, RequiredBy=, and UpheldBy= are used in the [Install] section to create symlinks in .wants/, .requires/, and .upholds/ directories. They cannot be used directly as a unit configuration setting.

Note: ConsistsOf=, BoundBy=, RequisiteOf=, ConflictedBy= are created implicitly along with their reverses and cannot be specified directly.

Note: Triggers= is created implicitly between a socket, path unit, or an automount unit, and the unit they activate. By default, a unit with the same name is triggered, but this can be overridden using Sockets=, Service=, and Unit= settings. See systemd.service(5), systemd.socket(5), systemd.path(5), and systemd.automount(5) for details. TriggeredBy= is created implicitly on the triggered unit.

Note: Following= is used to group device aliases and points to the "primary" device unit that systemd is using to track device state, usually corresponding to a sysfs path. It does not show up in the "target" unit.

Unit files may include an [Install] section, which carries installation information for the unit. This section is not interpreted by systemd(1) during runtime; it is used by the enable and disable commands of the systemctl(1) tool during installation of a unit.

Alias=

A space-separated list of additional names this unit shall be installed under. The names listed here must have the same suffix (i.e. type) as the unit filename. This option may be specified more than once, in which case all listed names are used. At installation time, systemctl enable will create symlinks from these names to the unit filename. Note that not all unit types support such alias names, and this setting is not supported for them. Specifically, mount, slice, swap, and automount units do not support aliasing.

Added in version 201.

WantedBy=, RequiredBy=, UpheldBy=

This option may be used more than once, or a space-separated list of unit names may be given. A symbolic link is created in the .wants/, .requires/, or .upholds/ directory of each of the listed units when this unit is installed by systemctl enable. This has the effect of a dependency of type Wants=, Requires=, or Upholds= being added from the listed unit to the current unit. See the description of the mentioned dependency types in the [Unit] section for details.

In case of template units listing non template units, the listing unit must have DefaultInstance= set, or systemctl enable must be called with an instance name. The instance (default or specified) will be added to the .wants/, .requires/, or .upholds/ list of the listed unit. For example, WantedBy=getty.target in a service getty@.service will result in systemctl enable getty@tty2.service creating a getty.target.wants/getty@tty2.service link to getty@.service. This also applies to listing specific instances of templated units: this specific instance will gain the dependency. A template unit may also list a template unit, in which case a generic dependency will be added where each instance of the listing unit will have a dependency on an instance of the listed template with the same instance value. For example, WantedBy=container@.target in a service monitor@.service will result in systemctl enable monitor@.service creating a container@.target.wants/monitor@.service link to monitor@.service, which applies to all instances of container@.target.

Added in version 201.

Also=

Additional units to install/deinstall when this unit is installed/deinstalled. If the user requests installation/deinstallation of a unit with this option configured, systemctl enable and systemctl disable will automatically install/uninstall units listed in this option as well.

This option may be used more than once, or a space-separated list of unit names may be given.

Added in version 201.

DefaultInstance=

یادداشت: WantedBy=، RequiredBy=، و UpheldBy= در بخش [Install] برای ایجاد پیوندهای نمادین در دایرکتوری‌های .wants/، .requires/، و .upholds/ استفاده می‌شوند. آن‌ها را نمی‌توان مستقیماً به عنوان یک تنظیم پیکربندی واحد استفاده کرد.

یادداشت: ConsistsOf=، BoundBy=، RequisiteOf=، ConflictedBy= به طور ضمنی همراه با معکوس‌های خود ایجاد می‌شوند و نمی‌توان آن‌ها را مستقیماً مشخص کرد.

یادداشت: Triggers= به طور ضمنی بین یک سوکت، واحد path یا یک واحد automount و واحدی که فعال می‌کنند ایجاد می‌شود. به طور پیش‌فرض، واحدی با همان نام فعال می‌شود، اما این را می‌توان با استفاده از تنظیمات Sockets=، Service=، و Unit= بازنویسی کرد. برای جزئیات، systemd.service(5)، systemd.socket(5)، systemd.path(5)، و systemd.automount(5) را ببینید. TriggeredBy= به طور ضمنی روی واحد تحریک‌شده ایجاد می‌شود.

یادداشت: Following= برای گروه‌بندی نام‌های مستعار دستگاه استفاده می‌شود و به واحد دستگاه «اصلی» اشاره می‌کند که systemd برای ردیابی وضعیت دستگاه از آن استفاده می‌نماید، که معمولاً با یک مسیر sysfs مطابقت دارد. این ویژگی در واحد «مقصد» نشان داده نمی‌شود.

فایل‌های واحد ممکن است شامل یک بخش [Install] باشند که اطلاعات نصب را برای واحد حمل می‌کند. این بخش توسط systemd(1) در زمان اجرا تفسیر نمی‌شود؛ بلکه توسط دستورات enable و disable از ابزار systemctl(1) در طول نصب یک واحد استفاده می‌شود.

Alias=

فهرستی از نام‌های اضافی جداشده با فاصله که این واحد باید تحت آن‌ها نصب شود. نام‌های فهرست‌شده در اینجا باید همان پسوند (یعنی نوع) نام فایل واحد را داشته باشند. این گزینه ممکن است بیش از یک بار مشخص شود، که در این صورت از تمام نام‌های فهرست‌شده استفاده می‌شود. در زمان نصب، systemctl enable پیوندهای نمادینی از این نام‌ها به نام فایل واحد ایجاد خواهد کرد. توجه داشته باشید که همه انواع واحد از چنین نام‌های مستعاری پشتیبانی نمی‌کنند و این تنظیم برای آن‌ها پشتیبانی نمی‌شود. به طور خاص، واحدهای mount، slice، swap و automount از نام‌های مستعار پشتیبانی نمی‌کنند.

افزوده‌شده در نسخه ۲۰۱.

WantedBy=, RequiredBy=, UpheldBy=

این گزینه ممکن است بیش از یک بار استفاده شود، یا فهرستی از نام‌های واحد جداشده با فاصله داده شود. هنگامی که این واحد توسط systemctl enable نصب می‌شود، یک پیوند نمادین در دایرکتوری .wants/، .requires/، یا .upholds/ هر یک از واحدهای فهرست‌شده ایجاد می‌گردد. این امر اثرِ افزوده‌شدن یک وابستگی از نوع Wants=، Requires=، یا Upholds= از واحد فهرست‌شده به واحد فعلی را دارد. برای جزئیات به شرح انواع وابستگی ذکرشده در بخش [Unit] مراجعه کنید.

در مورد واحدهای الگو که واحدهای غیرالگو را فهرست می‌کنند، واحد فهرست‌کننده باید DefaultInstance= را تنظیم کرده باشد، یا systemctl enable باید با یک نام نمونه فراخوانی شود. نمونه (پیش‌فرض یا مشخص‌شده) به فهرست .wants/، .requires/، یا .upholds/ واحد فهرست‌شده اضافه خواهد شد. برای مثال، WantedBy=getty.target در یک سرویس getty@.service منجر به این می‌شود که دستور systemctl enable getty@tty2.service پیوند getty.target.wants/getty@tty2.service را به getty@.service ایجاد کند. این همچنین برای فهرست کردن نمونه‌های خاص از واحدهای قالب‌بندی‌شده اعمال می‌شود: این نمونه خاص وابستگی را کسب خواهد کرد. یک واحد الگو همچنین ممکن است یک واحد الگو را فهرست کند، که در این حالت یک وابستگی عمومی اضافه می‌شود که در آن هر نمونه از واحد فهرست‌کننده وابستگی به یک نمونه از الگوی فهرست‌شده با همان مقدار نمونه خواهد داشت. برای مثال، WantedBy=container@.target در یک سرویس monitor@.service منجر به این خواهد شد که systemctl enable monitor@.service پیوند container.target.wants/monitor@.service را به monitor@.service ایجاد کند، که برای تمام نمونه‌های container@.target اعمال می‌شود.

افزوده‌شده در نسخه ۲۰۱.

Also=

واحدهای اضافی برای نصب/حذف نصب هنگامی که این واحد نصب/حذف نصب می‌شود. اگر کاربر درخواست نصب/حذف نصب یک واحد با این گزینه پیکربندی‌شده را داشته باشد، systemctl enable و systemctl disable به طور خودکار واحدهای فهرست‌شده در این گزینه را نیز نصب/حذف نصب خواهند کرد.

این گزینه ممکن است بیش از یک بار استفاده شود، یا فهرستی از نام‌های واحد جداشده با فاصله ارائه شود.

افزوده‌شده در نسخه ۲۰۱.

DefaultInstance=

در فایل‌های واحد الگو، مشخص می‌کند که واحد برای کدام نمونه باید فعال شود اگر الگو بدون هیچ نمونه صریحاً تنظیم‌شده‌ای فعال شود. این گزینه در فایل‌های واحد غیرالگو هیچ اثری ندارد. رشته مشخص‌شده باید به عنوان شناسه نمونه قابل استفاده باشد.

افزوده‌شده در نسخه ۲۱۵.

مشخص‌کننده‌های زیر در بخش Install تفسیر می‌شوند: %a, %b, %B, %g, %G, %H, %i, %j, %l, %m, %n, %N, %o, %p, %u, %U, %v, %w, %W, %%. برای معنای آن‌ها به بخش بعدی مراجعه کنید.

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

جدول ۵. مشخص‌کننده‌های موجود در فایل‌های واحد

مشخص‌کننده معنا جزئیات
"%a" معماری یک رشته کوتاه که معماری سیستم محلی را مشخص می‌کند. رشته‌ای مانند x86، x86-64 یا arm64. برای فهرست کامل، معماری‌های تعریف‌شده برای ConditionArchitecture= در بالا را ببینید.
"%A" نسخه تصویر سیستم‌عامل شناسه نسخه تصویر سیستم‌عامل سیستم در حال اجرا، همان‌طور که از فیلد IMAGE_VERSION= در /etc/os-release خوانده می‌شود. در صورت عدم تنظیم، به یک رشته خالی حل می‌شود. برای اطلاعات بیشتر os-release(5) را ببینید.
"%b" شناسه راه‌اندازی (Boot ID) شناسه راه‌اندازی سیستم در حال اجرا، قالب‌بندی‌شده به عنوان رشته. برای اطلاعات بیشتر random(4) را ببینید.
"%B" شناسه ساخت سیستم‌عامل شناسه ساخت سیستم‌عامل سیستم در حال اجرا، همان‌طور که از فیلد BUILD_ID= در /etc/os-release خوانده می‌شود. در صورت عدم تنظیم، به یک رشته خالی حل می‌شود. برای اطلاعات بیشتر os-release(5) را ببینید.
"%C" ریشه دایرکتوری حافظه موقت (Cache) این یا /var/cache است (برای مدیر سیستم) یا مسیری که "$XDG_CACHE_HOME" به آن حل می‌شود (برای مدیران کاربر).
"%d" دایرکتوری اعتبارات این مقدار متغیر محیطی "$CREDENTIALS_DIRECTORY" در صورت موجود بودن است. برای اطلاعات بیشتر به بخش "Credentials" در systemd.exec(5) مراجعه کنید.
"%D" دایرکتوری داده‌های اشتراکی این یا /usr/share/ است (برای مدیر سیستم) یا مسیری که "$XDG_DATA_HOME" به آن حل می‌شود (برای مدیران کاربر).
"%E" ریشه دایرکتوری پیکربندی این یا /etc/ است (برای مدیر سیستم) یا مسیری که "$XDG_CONFIG_HOME" به آن حل می‌شود (برای مدیران کاربر).
"%f" نام فایل بدون گریز این یا نام نمونه بدون گریز (در صورت کاربرد) با اضافه کردن / در ابتدا (در صورت کاربرد) است، یا نام پیشوند بدون گریز با اضافه کردن / در ابتدا. این بازگردانی گریز را طبق قوانین گریز مسیرهای مطلق سیستم فایل که در بالا بحث شد، پیاده‌سازی می‌کند.
"%g" گروه کاربر این نام گروهی است که نمونه مدیر سرویس را اجرا می‌کند. در مورد مدیر سیستم، این به "root" حل می‌شود.
"%G" شناسه گروه کاربر (GID) این GID عددی کاربری است که نمونه مدیر سرویس را اجرا می‌کند. در مورد مدیر سیستم، این به "0" حل می‌شود.
"%h" دایرکتوری خانه کاربر این دایرکتوری خانه کاربری است که نمونه مدیر سرویس را اجرا می‌کند. در مورد مدیر سیستم، این به "/root" حل می‌شود. توجه داشته باشید که این تنظیم تحت تأثیر تنظیم User= قابل پیکربندی در بخش [Service] واحد سرویس قرار نمی‌گیرد.
"%H" نام میزبان نام میزبان سیستم در حال اجرا در نقطه‌ای از زمان که پیکربندی واحد بارگذاری می‌شود.
"%i" نام نمونه برای واحدهای نمونه‌سازی‌شده، این رشته بین اولین نویسه "@" و پسوند نوع است. برای واحدهای غیرنمونه‌سازی‌شده خالی است.
"%I" نام نمونه بدون گریز مشابه "%i"، اما با لغو گریز (unescaped).
"%j" مؤلفه نهایی پیشوند این رشته بین آخرین "-" و انتهای نام پیشوند است. اگر هیچ "-" وجود نداشته باشد، این همان "%p" است.
"%J" مؤلفه نهایی پیشوند بدون گریز مشابه "%j"، اما با لغو گریز.
"%l" نام کوتاه میزبان نام میزبان سیستم در حال اجرا در نقطه‌ای از زمان که پیکربندی واحد بارگذاری می‌شود، که در اولین نقطه کوتاه شده تا هرگونه مؤلفه دامنه حذف شود.
"%L" ریشه دایرکتوری گزارش‌ها این یا /var/log است (برای مدیر سیستم) یا مسیری که $XDG_STATE_HOME با افزودن /log به آن حل می‌شود (برای مدیران کاربر).
"%m" شناسه ماشین شناسه ماشین سیستم در حال اجرا، قالب‌بندی‌شده به عنوان رشته. برای اطلاعات بیشتر machine-id(5) را ببینید.
"%M" شناسه تصویر سیستم‌عامل شناسه تصویر سیستم‌عامل سیستم در حال اجرا، همان‌طور که از فیلد IMAGE_ID= در /etc/os-release خوانده می‌شود. در صورت عدم تنظیم، به یک رشته خالی حل می‌شود. برای اطلاعات بیشتر os-release(5) را ببینید.
"%n" نام کامل واحد  
"%N" نام کامل واحد مشابه "%n"، اما با حذف پسوند نوع.
"%o" شناسه سیستم‌عامل شناسه سیستم‌عامل سیستم در حال اجرا، همان‌طور که از فیلد ID= در /etc/os-release خوانده می‌شود. برای اطلاعات بیشتر os-release(5) را ببینید.
"%p" نام پیشوند برای واحدهای نمونه‌سازی‌شده، این به رشته قبل از اولین نویسه "@" نام واحد اشاره دارد. برای واحدهای غیرنمونه‌سازی‌شده، همان "%N" است.
"%P" نام پیشوند بدون گریز مشابه "%p"، اما با لغو گریز.
"%q" نام زیبای میزبان نام زیبای میزبان سیستم در حال اجرا در زمان بارگذاری پیکربندی واحد، همان‌طور که از فیلد PRETTY_HOSTNAME= در /etc/machine-info خوانده می‌شود. در صورت عدم تنظیم، به نام کوتاه میزبان حل می‌شود. برای اطلاعات بیشتر machine-info(5) را ببینید.
"%s" پوسته کاربر این پوسته کاربری است که نمونه مدیر سرویس را اجرا می‌کند.
"%S" ریشه دایرکتوری وضعیت این یا /var/lib است (برای مدیر سیستم) یا مسیری که $XDG_STATE_HOME به آن حل می‌شود (برای مدیران کاربر).
"%t" ریشه دایرکتوری زمان اجرا این یا /run/ است (برای مدیر سیستم) یا مسیری که "$XDG_RUNTIME_DIR" به آن حل می‌شود (برای مدیران کاربر).
"%T" دایرکتوری فایل‌های موقت این یا /tmp است یا مسیری که "$TMPDIR"، "$TEMP" یا "$TMP" روی آن تنظیم شده‌اند. (توجه داشته باشید که دایرکتوری ممکن است بدون ممیز انتهایی مشخص شود.)
"%u" نام کاربر این نام کاربری است که نمونه مدیر سرویس را اجرا می‌کند. در مورد مدیر سیستم، این به "root" حل می‌شود. توجه داشته باشید که این تنظیم تحت تأثیر تنظیم User= قابل پیکربندی در بخش [Service] واحد سرویس قرار نمی‌گیرد.
"%U" شناسه عددی کاربر (UID) این UID عددی کاربری است که نمونه مدیر سرویس را اجرا می‌کند. در مورد مدیر سیستم، این به "0" حل می‌شود. توجه داشته باشید که این تنظیم تحت تأثیر تنظیم User= قابل پیکربندی در بخش [Service] واحد سرویس قرار نمی‌گیرد.
"%v" نسخه انتشار هسته همان خروجی uname -r.
"%V" دایرکتوری برای فایل‌های موقت بزرگ‌تر و پایدار این یا /var/tmp است یا مسیری که "$TMPDIR"، "$TEMP" یا "$TMP" روی آن تنظیم شده‌اند. (توجه داشته باشید که دایرکتوری ممکن است بدون ممیز انتهایی مشخص شود.)
"%w" شناسه نسخه سیستم‌عامل شناسه نسخه سیستم‌عامل سیستم در حال اجرا، همان‌طور که از فیلد VERSION_ID= در /etc/os-release خوانده می‌شود. در صورت عدم تنظیم، به یک رشته خالی حل می‌شود. برای اطلاعات بیشتر os-release(5) را ببینید.
"%W" شناسه گونه سیستم‌عامل شناسه گونه (variant) سیستم‌عامل سیستم در حال اجرا، همان‌طور که از فیلد VARIANT_ID= در /etc/os-release خوانده می‌شود. در صورت عدم تنظیم، به یک رشته خالی حل می‌شود. برای اطلاعات بیشتر os-release(5) را ببینید.
"%y" مسیر به فایل قطعه واحد این مسیری است که بخش اصلی فایل واحد در آن قرار دارد. برای فایل‌های واحد پیوندشده، مسیر واقعی خارج از دایرکتوری‌های جستجوی واحد استفاده می‌شود. برای واحدهایی که فایل قطعه ندارند، این مشخص‌کننده یک خطا ایجاد می‌کند.
"%Y" دایرکتوری قطعه واحد این بخش دایرکتوری "%y" است.
"%%" علامت درصد منفرد از "%%" به جای "%" برای مشخص کردن یک علامت درصد منفرد استفاده کنید.

مثال ۱. مجاز کردن فعال‌سازی واحدها

قطعه کد زیر (برجسته‌شده) به یک واحد (مثلاً foo.service) اجازه می‌دهد تا از طریق systemctl enable فعال شود:

[Unit]
Description=Foo
[Service]
ExecStart=/usr/sbin/foo-daemon
[Install]
WantedBy=multi-user.target

پس از اجرای systemctl enable، یک پیوند نمادین /etc/systemd/system/multi-user.target.wants/foo.service که به واحد واقعی پیوند دارد ایجاد خواهد شد. این به systemd می‌گوید که هنگام راه‌اندازی multi-user.target واحد را فراخوانی کند. دستور معکوس systemctl disable آن پیوند نمادین را دوباره حذف خواهد کرد.

مثال ۲. بازنویسی تنظیمات ارائه‌دهنده

دو روش برای بازنویسی تنظیمات ارائه‌دهنده در فایل‌های واحد وجود دارد: کپی کردن فایل واحد از /usr/lib/systemd/system به /etc/systemd/system و تغییر تنظیمات انتخاب‌شده. روش جایگزین، ایجاد یک دایرکتوری به نام unit.d/ درون /etc/systemd/system و قرار دادن یک فایل قطعه‌ای name.conf در آنجا است که تنها تنظیمات خاصی را که کاربر به آن‌ها علاقه‌مند است تغییر می‌دهد. توجه داشته باشید که در صورت وجود چندین فایل قطعه‌ای از این دست، به ترتیب لغت‌نگاری نام فایل آن‌ها پردازش می‌شوند.

مزیت روش اول این است که می‌توان به راحتی کل واحد را بازنویسی کرد و واحد ارائه‌دهنده دیگر اصلاً تجزیه نمی‌شود. عیب آن این است که بهبودهای اعمال‌شده روی فایل واحد توسط ارائه‌دهنده به طور خودکار در به‌روزرسانی‌ها گنجانده نمی‌شوند.

مزیت روش دوم این است که کاربر فقط تنظیماتی را که مشخصاً می‌خواهد بازنویسی می‌کند، در حالی که به‌روزرسانی‌های واحد توسط ارائه‌دهنده به طور خودکار اعمال می‌شوند. این روش این عیب را دارد که برخی از به‌روزرسانی‌های آینده توسط ارائه‌دهنده ممکن است با تغییرات محلی ناسازگار باشند.

این موضوع برای نمونه‌های کاربری systemd نیز صدق می‌کند، اما با مکان‌های متفاوتی برای فایل‌های واحد. برای جزئیات بیشتر به بخش مسیرهای بارگذاری واحد مراجعه کنید.

فرض کنید یک واحد ارائه‌شده توسط توزیع به آدرس /usr/lib/systemd/system/httpd.service با محتویات زیر وجود دارد:

[Unit]
Description=Some HTTP server
After=remote-fs.target sqldb.service
Requires=sqldb.service
AssertPathExists=/srv/webserver
[Service]
Type=notify
ExecStart=/usr/sbin/some-fancy-httpd-server
Nice=5
[Install]
WantedBy=multi-user.target

اکنون مدیر سیستم می‌خواهد برخی از تنظیمات را تغییر دهد: اولاً، در راه‌اندازی محلی، /srv/webserver ممکن است وجود نداشته باشد، زیرا وب‌سرور HTTP طوری پیکربندی شده است که از /srv/www به جای آن استفاده کند. ثانیاً، پیکربندی محلی باعث می‌شود که وب‌سرور HTTP به یک سرویس حافظه موقت (cache)، یعنی memcached.service نیز وابسته باشد که باید فراخوانی شود (Requires=) و همچنین به درستی ترتیب‌بندی گردد (After=). ثالثاً، به منظور ایمن‌سازی بیشتر سرویس، مدیر سیستم مایل است تنظیم PrivateTmp= را فعال کند (برای جزئیات systemd.exec(5) را ببینید). و در نهایت، مدیر سیستم می‌خواهد میزان اولویت نایس (niceness) سرویس را به مقدار پیش‌فرض ۰ بازنشانی کند.

اولین امکان، کپی کردن فایل واحد در /etc/systemd/system/httpd.service و تغییر تنظیمات انتخاب‌شده است:

[Unit]
Description=Some HTTP server
After=remote-fs.target sqldb.service memcached.service
Requires=sqldb.service memcached.service
AssertPathExists=/srv/www
[Service]
Type=notify
ExecStart=/usr/sbin/some-fancy-httpd-server
Nice=0
PrivateTmp=yes
[Install]
WantedBy=multi-user.target

از طرف دیگر، مدیر سیستم می‌تواند یک فایل قطعه‌ای /etc/systemd/system/httpd.service.d/local.conf با محتویات زیر ایجاد کند:

[Unit]
After=memcached.service
Requires=memcached.service
# بازنشانی تمام ارزیابی‌ها و سپس افزودن مجدد شرط مورد نظر
AssertPathExists=
AssertPathExists=/srv/www
[Service]
Nice=0
PrivateTmp=yes

توجه داشته باشید که برای فایل‌های drop-in، اگر بخواهید ورودی‌ها را از تنظیمی که به عنوان فهرست تجزیه می‌شود (و وابستگی نیست) حذف کنید، مانند AssertPathExists= (یا مثلاً ExecStart= در واحدهای سرویس)، ابتدا باید فهرست را قبل از افزودن مجدد تمام ورودی‌ها به جز موردی که قرار است حذف شود، پاک کنید. وابستگی‌ها (After= و غیره) را نمی‌توان به یک فهرست خالی بازنشانی کرد، بنابراین وابستگی‌ها را فقط می‌توان در drop-inها اضافه کرد. اگر می‌خواهید وابستگی‌ها را حذف کنید، باید کل واحد را بازنویسی کنید.

مثال ۳. فایل‌های قطعه‌ای سطح بالا با واحدهای الگو

فایل‌های قطعه‌ای سطح بالا به ازای هر نوع را می‌توان برای تغییر جنبه‌ای از تمام واحدهای یک نوع خاص استفاده کرد. برای مثال، با ایجاد دایرکتوری /etc/systemd/system/service.d/ با یک فایل قطعه‌ای، محتویات فایل قطعه‌ای را می‌توان برای تمام واحدهای سرویس اعمال کرد. می‌توانیم با ایجاد نمونه‌ای از یک واحد کمکی ثانویه توسط قطعه سطح بالا، این کار را فراتر ببریم. برای مثال، مجموعه واحدها و فایل‌های قطعه‌ای زیر را در نظر بگیرید که در آن یک وابستگی OnFailure= برای تمام واحدهای سرویس نصب می‌کنیم.

/etc/systemd/system/failure-handler@.service:

[Unit]
Description=My failure handler for %i
[Service]
Type=oneshot
# انجام یک اقدام خاص برای زمانی که %i به طور غیرمنتظره خارج می‌شود.
ExecStart=/usr/sbin/myfailurehandler %i

سپس می‌توانیم یک نمونه از failure-handler@.service را به عنوان یک وابستگی OnFailure= برای تمام واحدهای سرویس اضافه کنیم.

/etc/systemd/system/service.d/10-all.conf:

[Unit]
OnFailure=failure-handler@%N.service

اکنون پس از اجرای systemctl daemon-reload تمام سرویس‌ها یک وابستگی OnFailure= به failure-handler@%N.service کسب خواهند کرد. واحدهای نمونه الگو نیز این وابستگی را به دست خواهند آورد که منجر به ایجاد یک زنجیره وابستگی بازگشتی می‌شود. systemd سعی خواهد کرد این زنجیره‌های وابستگی بازگشتی را که در آن یک واحد الگو مستقیماً و به طور بازگشتی به خودش وابسته است شناسایی کند و در صورت یافتن، چنین وابستگی‌هایی را به طور خودکار حذف خواهد کرد. اگر systemd زنجیره وابستگی بازگشتی را شناسایی نکند، ما می‌توانیم با غیرفعال کردن drop-in برای واحدهای نمونه الگو از طریق یک پیوند نمادین به /dev/null خودمان زنجیره را بشکنیم:

mkdir /etc/systemd/system/failure-handler@.service.d/
ln -s /dev/null /etc/systemd/system/failure-handler@.service.d/10-all.conf
systemctl daemon-reload

این تضمین می‌کند که اگر یک نمونه failure-handler@.service ناموفق شود، نمونه‌ای به نام failure-handler@failure-handler.service را فعال نخواهد کرد.

systemd(1), systemctl(1), systemd-system.conf(5), systemd.special(7), systemd.service(5), systemd.socket(5), systemd.device(5), systemd.mount(5), systemd.automount(5), systemd.swap(5), systemd.target(5), systemd.path(5), systemd.timer(5), systemd.scope(5), systemd.slice(5), systemd.time(7), systemd-analyze(1), capabilities(7), systemd.directives(7), uname(1)

1.
تعهد پایداری و قابلیت حمل رابط (Interface Portability and Stability Promise)
2.
💣💥🧨💥💥💣 لطفاً توجه داشته باشید که این فایل‌های پیکربندی باید همیشه در دسترس باشند. اگر /usr/local/ یک پارتیشن جداگانه باشد، ممکن است در طول راه‌اندازی اولیه در دسترس نباشد و نباید برای پیکربندی استفاده شود.
3.
systemd و دیمن‌های ذخیره‌سازی برای سیستم فایل ریشه
4.
اعتبارات سیستم و سرویس
5.
PSI (اطلاعات توقف تحت فشار)
systemd 257.13