| SYSTEMD.UNIT(5) | systemd.unit | SYSTEMD.UNIT(5) |
نام (NAME)
systemd.unit - پیکربندی عمومی و تنظیمات مشترک واحدهای systemd
خلاصه دستور (SYNOPSIS)
service.service, socket.socket, device.device, mount.mount, automount.automount, swap.swap, target.target, path.path, timer.timer, slice.slice, scope.scope
مسیر جستجوی واحدهای سیستمی (System Unit Search Path)
مسیر جستجوی واحدهای کاربری (User Unit Search Path)
توضیحات (DESCRIPTION)
یک فایل واحد، یک فایل متنی ساده به سبک 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 FOR INCLUSION IN UNIT NAMES)
گاهی اوقات تبدیل رشتههای دلخواه به نامهای واحد مفید است. برای تسهیل این امر، روشی برای گریز رشتهها (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 در سایر موارد استفاده کنید.
وابستگیهای خودکار (AUTOMATIC DEPENDENCIES)
وابستگیهای ضمنی (Implicit Dependencies)
بسته به نوع واحد و پیکربندی آن، تعدادی وابستگی واحد به طور ضمنی برقرار میشوند. این وابستگیهای ضمنی میتوانند فایل پیکربندی واحد را تمیزتر و مرتبتر کنند. برای وابستگیهای ضمنی در هر نوع واحد، لطفاً به بخش «وابستگیهای ضمنی» در صفحات راهنمای مربوطه مراجعه کنید.
به عنوان مثال، واحدهای سرویس با Type=dbus به طور خودکار وابستگیهایی از نوع Requires= و After= به dbus.socket به دست میآورند. برای جزئیات systemd.service(5) را ببینید.
وابستگیهای پیشفرض (Default Dependencies)
وابستگیهای پیشفرض مشابه وابستگیهای ضمنی هستند، اما میتوان آنها را با تنظیم DefaultDependencies= روی yes (پیشفرض) و no روشن و خاموش کرد، در حالی که وابستگیهای ضمنی همیشه برقرار هستند. برای آگاهی از تأثیر فعالسازی DefaultDependencies= در هر یک از انواع واحدها، بخش «وابستگیهای پیشفرض» در صفحات راهنمای مربوطه را ببینید.
به عنوان مثال، واحدهای هدف تمام وابستگیهای پیکربندیشده از نوع Wants= یا Requires= را با وابستگیهایی از نوع After= تکمیل میکنند. برای جزئیات systemd.target(5) را ببینید. توجه داشته باشید که این رفتار را میتوان با تنظیم DefaultDependencies=no در واحدهای مشخصشده غیرفعال کرد، یا میتوان آن را به صورت انتخابی از طریق یک وابستگی صریح Before= بازنویسی نمود.
مسیر بارگذاری فایل واحد (UNIT FILE LOAD PATH)
فایلهای واحد از مجموعهای از مسیرها که در زمان کامپایل تعیین شدهاند بارگذاری میشوند که در دو جدول زیر توضیح داده شده است. فایلهای واحدی که در دایرکتوریهای ابتدای فهرست یافت میشوند، فایلهای همنام در دایرکتوریهای پایینتر فهرست را لغو و بازنویسی میکنند [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 پیکربندی آن را فراهم میکند.
جمعآوری زباله واحدها (UNIT GARBAGE COLLECTION)
مدیر سیستم و سرویس پیکربندی یک واحد را به طور خودکار هنگامی که برای اولین بار به آن ارجاع داده میشود بارگذاری میکند. همچنین هنگامی که دیگر نیازی به واحد نباشد، پیکربندی و وضعیت واحد را به طور خودکار تخلیه میکند («جمعآوری زباله» یا garbage collection). یک واحد ممکن است از طریق چندین مکانیزم مختلف مورد ارجاع قرار گیرد:
منطق جمعآوری زباله را میتوان با گزینه CollectMode= تغییر داد، که امکان پیکربندی مجاز بودن تخلیه خودکار واحدهایی را که در وضعیت failed هستند فراهم میکند، به زیر مراجعه کنید.
توجه داشته باشید که وقتی پیکربندی و وضعیت یک واحد تخلیه میشود، تمام نتایج اجرا، مانند کدهای خروج، سیگنالهای خروج، مصرف منابع و سایر آمارها از دست میروند، به جز مواردی که در زیرسیستم گزارشها ذخیره شدهاند.
از systemctl daemon-reload یا یک دستور معادل برای بارگذاری مجدد پیکربندی واحد در حالی که واحد از قبل بارگذاری شده است استفاده کنید. در این حالت، تمام تنظیمات پیکربندی پاک شده و با پیکربندی جدید جایگزین میشوند (که البته ممکن است بلافاصله اعمال نشود)، اما تمام وضعیتهای زمان اجرا ذخیره/بازیابی میشوند.
گزینههای بخش [UNIT] ([UNIT] SECTION OPTIONS)
فایل واحد ممکن است شامل یک بخش [Unit] باشد که اطلاعات عمومی در مورد واحد را حمل میکند که وابسته به نوع واحد نیست:
Description=
افزودهشده در نسخه ۲۰۱.
Documentation=
افزودهشده در نسخه ۲۰۱.
Wants=
واحدهای فهرستشده در این گزینه در صورت راهاندازی واحد پیکربندیکننده، راهاندازی خواهند شد. با این حال، اگر واحدهای فهرستشده در راهاندازی ناموفق شوند یا نتوانند به تراکنش اضافه شوند، این هیچ تأثیری بر اعتبار کل تراکنش ندارد و این واحد همچنان راهاندازی خواهد شد. این روش توصیهشده برای متصل کردن راهاندازی یک واحد به راهاندازی واحد دیگر است.
توجه داشته باشید که وابستگیهای نیازمندی بر ترتیبی که سرویسها راهاندازی یا متوقف میشوند تأثیری ندارند. این موضوع باید به طور مستقل با گزینههای After= یا Before= پیکربندی شود. اگر واحد foo.service واحد bar.service را طبق پیکربندی با Wants= به همراه بیاورد و هیچ ترتیبی با After= یا Before= پیکربندی نشده باشد، در صورت فعال شدن foo.service، هر دو واحد به طور همزمان و بدون هیچ تأخیری بین آنها راهاندازی خواهند شد.
افزودهشده در نسخه ۲۰۱.
Requires=
اگر این واحد فعال شود، واحدهای فهرستشده نیز فعال خواهند شد. اگر یکی از واحدهای دیگر در فعالسازی ناموفق شود، و یک وابستگی ترتیبی After= روی واحد ناموفق تنظیم شده باشد، این واحد راهاندازی نخواهد شد. علاوه بر این، با یا بدون تعیین After=، اگر یکی از واحدهای دیگر به صراحت متوقف (یا بازراهاندازی) شود، این واحد متوقف (یا بازراهاندازی) خواهد شد.
اغلب، استفاده از Wants= به جای Requires= انتخاب بهتری است تا به سیستمی دست یافت که در مواجهه با سرویسهای ناموفق استحکام بیشتری داشته باشد.
توجه داشته باشید که این نوع وابستگی دلالت بر این ندارد که واحد دیگر همیشه باید در وضعیت فعال باشد وقتی این واحد در حال اجراست. به طور خاص: بررسیهای ناموفق شرایط (مانند ConditionPathExists=، ConditionPathIsSymbolicLink=، ... — به زیر مراجعه کنید) باعث شکست کار راهاندازی واحدی با وابستگی Requires= به آن نمیشوند. همچنین، برخی از انواع واحدها ممکن است به خودی خود غیرفعال شوند (به عنوان مثال، یک فرآیند سرویس ممکن است تصمیم بگیرد به طور تمیز خارج شود، یا یک دستگاه ممکن است توسط کاربر جدا شود)، که به واحدهای دارای وابستگی Requires= منتشر نمیشود. از نوع وابستگی BindsTo= همراه با After= استفاده کنید تا اطمینان حاصل شود که یک واحد هرگز نمیتواند در وضعیت فعال باشد بدون اینکه یک واحد خاص دیگر نیز در وضعیت فعال باشد (به زیر مراجعه کنید).
افزودهشده در نسخه ۲۰۱.
Requisite=
هنگامی که Requisite=b.service در a.service استفاده میشود، این وابستگی به عنوان RequisiteOf=a.service در فهرست ویژگیهای b.service نشان داده خواهد شد. وابستگی RequisiteOf= را نمیتوان مستقیماً مشخص کرد.
افزودهشده در نسخه ۲۰۱.
BindsTo=
هنگامی که در ارتباط با After= روی همان واحد استفاده میشود، رفتار BindsTo= حتی قویتر است. در این حالت، واحدی که به آن متصل شده است به طور اکید باید در وضعیت فعال باشد تا این واحد نیز در وضعیت فعال باشد. این امر نه تنها به این معنی است که واحدی که به واحد دیگری متصل است که ناگهان وارد وضعیت غیرفعال میشود متوقف خواهد شد، بلکه واحدی که به واحد دیگری متصل است که به دلیل برآورده نشدن یک بررسی شرط (مانند ConditionPathExists=، ConditionPathIsSymbolicLink=، ... — به زیر مراجعه کنید) نادیده گرفته میشود نیز در صورت اجرا متوقف خواهد شد. بنابراین، در بسیاری از موارد بهتر است BindsTo= را با After= ترکیب کنید.
هنگامی که BindsTo=b.service روی a.service استفاده میشود، این وابستگی به عنوان BoundBy=a.service در فهرست ویژگیهای b.service نشان داده خواهد شد. وابستگی BoundBy= را نمیتوان مستقیماً مشخص کرد.
افزودهشده در نسخه ۲۰۱.
PartOf=
هنگامی که PartOf=b.service روی a.service استفاده میشود، این وابستگی به عنوان ConsistsOf=a.service در فهرست ویژگیهای b.service نشان داده خواهد شد. وابستگی ConsistsOf= را نمیتوان مستقیماً مشخص کرد.
افزودهشده در نسخه ۲۰۱.
Upholds=
هنگامی که Upholds=b.service روی a.service استفاده میشود، این وابستگی به عنوان UpheldBy=a.service در فهرست ویژگیهای b.service نشان داده خواهد شد.
افزودهشده در نسخه ۲۴۹.
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=
افزودهشده در نسخه ۲۰۱.
OnSuccess=
افزودهشده در نسخه ۲۴۹.
PropagatesReloadTo=, ReloadPropagatedFrom=
افزودهشده در نسخه ۲۰۱.
PropagatesStopTo=, StopPropagatedFrom=
افزودهشده در نسخه ۲۴۹.
JoinsNamespaceOf=
افزودهشده در نسخه ۲۰۹.
RequiresMountsFor=
نقاط اتصالی که با noauto علامتگذاری شدهاند به طور خودکار از طریق local-fs.target متصل نمیشوند، اما همچنان برای اهداف این گزینه محترم شمرده میشوند، یعنی توسط این واحد به همراه آورده خواهند شد.
افزودهشده در نسخه ۲۰۱.
WantsMountsFor=
افزودهشده در نسخه ۲۵۶.
OnSuccessJobMode=, OnFailureJobMode=
افزودهشده در نسخه ۲۰۹.
IgnoreOnIsolate=
افزودهشده در نسخه ۲۰۱.
StopWhenUnneeded=
افزودهشده در نسخه ۲۰۱.
RefuseManualStart=, RefuseManualStop=
افزودهشده در نسخه ۲۰۱.
AllowIsolate=
افزودهشده در نسخه ۲۰۱.
DefaultDependencies=
افزودهشده در نسخه ۲۰۱.
SurviveFinalKillSignal=
افزودهشده در نسخه ۲۵۵.
CollectMode=
افزودهشده در نسخه ۲۳۶.
FailureAction=, SuccessAction=
اگر 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=
افزودهشده در نسخه ۲۴۰.
JobTimeoutSec=, JobRunningTimeoutSec=
هر دو تنظیم یک بازه زمانی را با واحد پیشفرض ثانیه میگیرند، اما واحدهای دیگر نیز میتوانند مشخص شوند، systemd.time(7) را ببینید. مقدار پیشفرض "infinity" (مهلتهای زمانی کار غیرفعال است) است، به جز برای واحدهای دستگاه که در آنها JobRunningTimeoutSec= به طور پیشفرض روی DefaultDeviceTimeoutSec= تنظیم میشود.
نکته: این مهلتهای زمانی مستقل از هرگونه مهلت زمانی ویژه واحد هستند (به عنوان مثال، مهلت زمانی تنظیمشده با TimeoutStartSec= در واحدهای سرویس). مهلت زمانی کار هیچ تأثیری بر خود واحد ندارد. یا به عبارت دیگر: مهلتهای زمانی ویژه واحد برای لغو تغییرات وضعیت واحد و بازگرداندن آنها مفید هستند. اما مهلت زمانی کار تنظیمشده با این گزینه فقط برای لغو کاری که منتظر تغییر وضعیت واحد است مفید است.
افزودهشده در نسخه ۲۰۱.
JobTimeoutAction=, JobTimeoutRebootArgument=
JobTimeoutRebootArgument= یک رشته اختیاری برای راهاندازی مجدد پیکربندی میکند تا به فراخوان سیستمی reboot(2) ارسال شود.
افزودهشده در نسخه ۲۴۰.
StartLimitIntervalSec=interval, StartLimitBurst=burst
interval یک بازه زمانی با واحد پیشفرض ثانیه است، اما سایر واحدها نیز میتوانند مشخص شوند، systemd.time(7) را ببینید. مقدار ویژه "infinity" میتواند برای محدود کردن تعداد کل تلاشهای راهاندازی استفاده شود، حتی اگر آنها در فواصل زمانی بزرگ رخ دهند. مقدار پیشفرض روی DefaultStartLimitIntervalSec= در فایل پیکربندی مدیر تنظیم شده است، و ممکن است برای غیرفعال کردن هر نوع محدودیت نرخ روی ۰ تنظیم شود. burst یک عدد است و به طور پیشفرض روی DefaultStartLimitBurst= در فایل پیکربندی مدیر تنظیم میشود.
این گزینههای پیکربندی به ویژه در ارتباط با تنظیم سرویس Restart= مفید هستند (به systemd.service(5) مراجعه کنید)؛ با این حال، آنها برای انواع شروعها (از جمله دستی) اعمال میشوند، نه فقط مواردی که توسط منطق Restart= تحریک شدهاند.
توجه داشته باشید واحدهایی که برای Restart= پیکربندی شدهاند و به حد مجاز راهاندازی میرسند، دیگر تلاشی برای راهاندازی مجدد آنها صورت نمیگیرد؛ با این حال، ممکن است پس از سپری شدن interval، همچنان به صورت دستی یا از طریق یک تایمر یا سوکت در نقطهای بعدی مجدداً راهاندازی شوند. از آن نقطه به بعد، منطق راهاندازی مجدد دوباره فعال میشود. دستور systemctl reset-failed باعث پاک شدن شمارنده نرخ راهاندازی مجدد برای یک سرویس میشود، که اگر مدیر سیستم بخواهد به صورت دستی یک واحد را راهاندازی کند و محدودیت شروع با آن تداخل داشته باشد، مفید است. محدودیت نرخ پس از اجرای هرگونه بررسی شرایط واحد اعمال میشود، و از این رو فعالسازیهای واحد با شرایط ناموفق در محدودیت نرخ محاسبه نمیشوند.
هنگامی که یک واحد به دلیل منطق جمعآوری زباله (به بالا مراجعه کنید) تخلیه میشود، شمارندههای محدودیت نرخ آن نیز پاک میشوند. این بدان معناست که پیکربندی محدودیت نرخ شروع برای واحدی که به طور مداوم به آن ارجاع داده نمیشود، هیچ اثری ندارد.
این تنظیم برای واحدهای slice، target، device و scope اعمال نمیشود، زیرا آنها انواع واحدهایی هستند که فعالسازی آنها یا هرگز ناموفق نمیشود، یا تنها یک بار میتواند موفق شود.
افزودهشده در نسخه ۲۲۹.
StartLimitAction=
افزودهشده در نسخه ۲۲۹.
RebootArgument=
افزودهشده در نسخه ۲۲۹.
SourcePath=
افزودهشده در نسخه ۲۰۱.
شرطها و ارزیابیها (Conditions and Asserts)
فایلهای واحد ممکن است شامل تعدادی از تنظیمات Condition...= و Assert...= باشند. قبل از شروع واحد، systemd بررسی میکند که آیا شرایط و ارزیابیهای مشخصشده برقرار هستند یا خیر. در غیر این صورت، راهاندازی واحد (عمدتاً بیصدا) نادیده گرفته میشود (در مورد شرایط)، یا با یک پیام خطا لغو میشود (در مورد ارزیابیها). شرایط یا ارزیابیهای ناموفق منجر به انتقال واحد به وضعیت "failed" نمیشوند. شرایط و ارزیابیها در زمانی که کار راهاندازیِ در صف قرار گرفته قرار است اجرا شود، بررسی میشوند. وابستگیهای ترتیبی همچنان رعایت میشوند، بنابراین سایر واحدها همچنان فراخوانی شده و مرتب میشوند به گونهای که گویی این واحد با موفقیت فعال شده است، و شرایط و ارزیابیها دقیقاً در همان لحظهای اجرا میشوند که واحد به طور معمول راهاندازی میشد و بنابراین میتوانند وضعیت سیستم را پس از تکمیل مقداردهی اولیه واحدهایی که قبل از آن مرتب شدهاند، اعتبارسنجی کنند. از عبارتهای شرطی برای نادیده گرفتن واحدهایی که برای سیستم محلی اعمال نمیشوند، استفاده کنید؛ به عنوان مثال به این دلیل که هسته یا محیط زمان اجرا به عملکرد آنها نیازی ندارد.
اگر چندین شرط مشخص شده باشد، واحد در صورتی اجرا میشود که همه آنها اعمال شوند (یعنی یک AND منطقی اعمال میشود). بررسیهای شرط میتوانند از یک علامت خط عمودی ("|") بعد از علامت مساوی ("Condition...=|...") استفاده کنند که باعث میشود شرط به یک شرط محرک (triggering) تبدیل شود. اگر حداقل یک شرط محرک برای یک واحد تعریف شده باشد، در این صورت اگر حداقل یکی از شرایط محرک واحد برقرار باشد و تمام شرایط عادی (یعنی غیرمحرک) برقرار باشند، واحد راهاندازی خواهد شد. اگر پیشوند یک آرگومان را با نماد لوله و یک علامت تعجب قرار دهید، نماد لوله باید اول و علامت تعجب دوم باشد. اگر به هر یک از این گزینهها رشته خالی اختصاص داده شود، فهرست شرایط به طور کامل بازنشانی میشود و تمام تنظیمات قبلی شرط (از هر نوع) بیاثر خواهند بود.
گزینههای AssertArchitecture=، AssertVirtualization=، ... مشابه شرایط هستند اما باعث میشوند کار راهاندازی با شکست مواجه شود (به جای نادیده گرفته شدن). بررسی ناموفق در گزارش ثبت میشود. واحدهایی با شرایط برآوردهنشده در وضعیت تمیز در نظر گرفته میشوند و در صورت عدم ارجاع، زبالهروبی خواهند شد. این بدان معناست که در صورت استعلام، عدم برآورده شدن شرط ممکن است در وضعیت واحد نشان داده شود یا نشود.
توجه داشته باشید که نه عبارات ارزیابی و نه عبارات شرطی منجر به تغییر وضعیت واحد نمیشوند. همچنین توجه داشته باشید که هر دو در زمانی بررسی میشوند که کار قرار است اجرا شود، یعنی مدتها پس از اینکه کارهای وابسته و خود آن در صف قرار گرفتند. بنابراین، نه عبارات شرطی و نه عبارات ارزیابی برای شرطی کردن وابستگیهای واحد مناسب نیستند.
از فعل condition در دستور systemd-analyze(1) میتوان برای آزمایش عبارات شرطی و ارزیابی استفاده کرد.
به جز ConditionPathIsSymbolicLink=، تمام بررسیهای مسیر، پیوندهای نمادین را دنبال میکنند.
ConditionArchitecture=
برای فهرست کامل معماریهای شناختهشده از systemd-analyze(1) استفاده کنید.
معماری از اطلاعات بازگرداندهشده توسط uname(2) تعیین میشود و بنابراین تابع personality(2) است. توجه داشته باشید که تنظیم Personality= در همان فایل واحد هیچ تأثیری بر این شرط ندارد. نام معماری ویژه "native" به معماری که خود مدیر سیستم برای آن کامپایل شده است، نگاشت میشود. آزمون را میتوان با قرار دادن یک علامت تعجب در ابتدا نفی کرد.
افزودهشده در نسخه ۲۰۱.
ConditionFirmware=
افزودهشده در نسخه ۲۴۹.
ConditionVirtualization=
افزودهشده در نسخه ۲۴۴.
ConditionHost=
افزودهشده در نسخه ۲۴۴.
ConditionKernelCommandLine=
افزودهشده در نسخه ۲۴۴.
ConditionKernelVersion=
توجه داشته باشید که استفاده از رشته نسخه هسته روشی غیرقابل اعتماد برای تعیین ویژگیهای پشتیبانیشده توسط یک هسته است، زیرا این عمل گسترده وجود دارد که درایورها، ویژگیها و اصلاحات را از هستههای بالادستی جدیدتر به نسخههای قدیمیتر ارائهشده توسط توزیعها منتقل (backport) میکنند. از این رو، این بررسی ذکراً غیرقابل حمل است و نباید برای واحدهایی که ممکن است در توزیعهای مختلف استفاده شوند به کار رود.
افزودهشده در نسخه ۲۴۴.
ConditionCredential=
افزودهشده در نسخه ۲۵۲.
ConditionEnvironment=
افزودهشده در نسخه ۲۴۶.
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=
افزودهشده در نسخه ۲۴۴.
ConditionACPower=
افزودهشده در نسخه ۲۴۴.
ConditionNeedsUpdate=
اگر گزینه systemd.condition_needs_update= در خط فرمان هسته مشخص شده باشد (با مقدار بولی)، نتیجه این بررسی شرط را بازنویسی میکند و بر هرگونه بررسی زمان تغییر فایل اولویت دارد. اگر از گزینه خط فرمان هسته استفاده شود، systemd-update-done.service تأثیر فوری بر بررسیهای بعدی ConditionNeedsUpdate= نخواهد داشت، تا زمانی که سیستم مجدداً راهاندازی شود که در آن گزینه خط فرمان هسته دیگر مشخص نشده باشد.
توجه داشته باشید برای اینکه این طرح مؤثر باشد، برچسب زمانی /usr/ باید پس از تغییر محتویات آن به صراحت بهروزرسانی شود. هسته فقط زمانی برچسب زمانی تغییر را در یک دایرکتوری به طور خودکار بهروزرسانی میکند که فرزندان فوری یک دایرکتوری تغییر کنند؛ تغییر فایلهای تودرتو به طور خودکار منجر به بهروزرسانی mtime در /usr/ نمیشود.
همچنین توجه داشته باشید که اگر روش بهروزرسانی شامل فراخوانی برای اجرای مراحل مناسب پس از بهروزرسانی باشد، نباید برچسب زمانی /usr/ را تغییر دهد. در یک طرح معمول بستهبندی توزیع، بستهها هر مرحله بهروزرسانی لازم را به عنوان بخشی از نصب یا ارتقا انجام میدهند تا محتویات بسته بلافاصله قابل استفاده باشد. ConditionNeedsUpdate= باید با سایر مکانیسمهای بهروزرسانی استفاده شود که در آنها چنین بهروزرسانی فوری رخ نمیدهد.
افزودهشده در نسخه ۲۴۴.
ConditionFirstBoot=
این شرط ممکن است برای پر کردن /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=
افزودهشده در نسخه ۲۴۴.
ConditionPathExistsGlob=
افزودهشده در نسخه ۲۴۴.
ConditionPathIsDirectory=
افزودهشده در نسخه ۲۴۴.
ConditionPathIsSymbolicLink=
افزودهشده در نسخه ۲۴۴.
ConditionPathIsMountPoint=
افزودهشده در نسخه ۲۴۴.
ConditionPathIsReadWrite=
افزودهشده در نسخه ۲۴۴.
ConditionPathIsEncrypted=
افزودهشده در نسخه ۲۴۶.
ConditionDirectoryNotEmpty=
افزودهشده در نسخه ۲۴۴.
ConditionFileNotEmpty=
افزودهشده در نسخه ۲۴۴.
ConditionFileIsExecutable=
افزودهشده در نسخه ۲۴۴.
ConditionUser=
افزودهشده در نسخه ۲۴۴.
ConditionGroup=
افزودهشده در نسخه ۲۴۴.
ConditionControlGroupController=
چندین کنترلکننده را میتوان با فاصله جداکننده ارسال کرد؛ در این حالت، شرط تنها در صورتی پذیرفته میشود که تمام کنترلکنندههای فهرستشده برای استفاده در دسترس باشند. کنترلکنندههای ناشناخته برای systemd نادیده گرفته میشوند. کنترلکنندههای معتبر عبارتند از "cpu"، "io"، "memory" و "pids". حتی اگر در هسته در دسترس باشد، اگر یک کنترلکننده خاص در خط فرمان هسته با cgroup_disable=controller غیرفعال شده باشد، ممکن است در دسترس نباشد.
به عنوان روشی جایگزین، دو رشته ویژه "v1" و "v2" ممکن است مشخص شوند (بدون هیچ نام کنترلکنندهای). "v2" در صورتی که از سلسلهمراتب یکپارچه v2 cgroup استفاده شود قبول خواهد شد، و "v1" در صورتی که از سلسلهمراتب موروثی v1 یا سلسلهمراتب ترکیبی استفاده شود پذیرفته میشود. توجه داشته باشید که سلسلهمراتبهای موروثی یا ترکیبی منسوخ شدهاند. برای اطلاعات بیشتر systemd(1) را ببینید.
افزودهشده در نسخه ۲۴۴.
ConditionMemory=
افزودهشده در نسخه ۲۴۴.
ConditionCPUs=
افزودهشده در نسخه ۲۴۴.
ConditionCPUFeature=
افزودهشده در نسخه ۲۴۸.
ConditionOSRelease=
به غیر از تطبیق دقیق رشته (با "=" و "!=")، مقایسههای نسبی برای پارامترهای نسخهدار پشتیبانی میشوند (مثلاً "VERSION_ID"؛ با "<"، "<="، "=="، "<>"، ">="، ">")، و مقایسههای عمومی به سبک پوسته ("*"، "?"، "[]") با "$=" (تطبیق) و "!$=" (عدم تطبیق) پشتیبانی میشوند.
اگر کلید دادهشده در فایل یافت نشود، تطبیق در برابر یک مقدار خالی انجام میشود.
افزودهشده در نسخه ۲۴۹.
ConditionMemoryPressure=, ConditionCPUPressure=, ConditionIOPressure=
به صورت اختیاری، مقدار آستانه میتواند با واحد 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=
افزودهشده در نسخه ۲۱۸.
نگاشت ویژگیهای واحد به معکوس آنها (MAPPING OF UNIT PROPERTIES TO THEIR INVERSES)
تنظیمات واحد که با یک واحد دوم رابطه ایجاد میکنند معمولاً در ویژگیهای هر دو واحد نشان داده میشوند، به عنوان مثال در خروجی 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.
[INSTALL] SECTION OPTIONS
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=
Added in version 201.
WantedBy=, RequiredBy=, UpheldBy=
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=
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.
[INSTALL] SECTION OPTIONS
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=
Added in version 201.
WantedBy=, RequiredBy=, UpheldBy=
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=
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] ([INSTALL] SECTION OPTIONS)
فایلهای واحد ممکن است شامل یک بخش [Install] باشند که اطلاعات نصب را برای واحد حمل میکند. این بخش توسط systemd(1) در زمان اجرا تفسیر نمیشود؛ بلکه توسط دستورات enable و disable از ابزار systemctl(1) در طول نصب یک واحد استفاده میشود.
Alias=
افزودهشده در نسخه ۲۰۱.
WantedBy=, RequiredBy=, UpheldBy=
در مورد واحدهای الگو که واحدهای غیرالگو را فهرست میکنند، واحد فهرستکننده باید 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=
این گزینه ممکن است بیش از یک بار استفاده شود، یا فهرستی از نامهای واحد جداشده با فاصله ارائه شود.
افزودهشده در نسخه ۲۰۱.
DefaultInstance=
افزودهشده در نسخه ۲۱۵.
مشخصکنندههای زیر در بخش Install تفسیر میشوند: %a, %b, %B, %g, %G, %H, %i, %j, %l, %m, %n, %N, %o, %p, %u, %U, %v, %w, %W, %%. برای معنای آنها به بخش بعدی مراجعه کنید.
مشخصکنندهها (SPECIFIERS)
بسیاری از تنظیمات، مشخصکنندهها را حل و جایگزین میکنند که میتوان از آنها برای نوشتن فایلهای واحد عمومی با ارجاع به پارامترهای زمان اجرا یا واحد که هنگام بارگذاری فایلهای واحد جایگزین میشوند، استفاده کرد. مشخصکنندهها باید شناختهشده و قابل حل باشند تا تنظیمات معتبر باشند. مشخصکنندههای زیر شناسایی میشوند:
جدول ۵. مشخصکنندههای موجود در فایلهای واحد
| مشخصکننده | معنا | جزئیات |
| "%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" است. |
| "%%" | علامت درصد منفرد | از "%%" به جای "%" برای مشخص کردن یک علامت درصد منفرد استفاده کنید. |
مثالها (EXAMPLES)
مثال ۱. مجاز کردن فعالسازی واحدها
قطعه کد زیر (برجستهشده) به یک واحد (مثلاً 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 را فعال نخواهد کرد.
همچنین ببینید (SEE ALSO)
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)
نکات (NOTES)
- 1.
- تعهد پایداری و قابلیت حمل رابط (Interface Portability and Stability Promise)
- 2.
- 💣💥🧨💥💥💣 لطفاً توجه داشته باشید که این فایلهای پیکربندی باید همیشه در دسترس باشند. اگر /usr/local/ یک پارتیشن جداگانه باشد، ممکن است در طول راهاندازی اولیه در دسترس نباشد و نباید برای پیکربندی استفاده شود.
- 3.
- systemd و دیمنهای ذخیرهسازی برای سیستم فایل ریشه
- 4.
- اعتبارات سیستم و سرویس
- 5.
- PSI (اطلاعات توقف تحت فشار)
| systemd 257.13 |