'\" t .TH "SYSTEMD\&.SERVICE" "5" "" "systemd 257.13" "systemd.service" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" systemd.service \- پیکربندی و تعاریف سرویس‌های systemd .SH "خلاصه دستور (SYNOPSIS)" .PP \fIservice\fR\&.service .SH "توضیحات (DESCRIPTION)" .PP یک فایل پیکربندی واحد که نام آن به "\&.service" ختم می‌شود، اطلاعات مربوط به فرآیندی را که توسط systemd کنترل و نظارت می‌شود، کدگذاری می‌کند\&. .PP این صفحه راهنما، گزینه‌های پیکربندی مخصوص این نوع واحد را فهرست می‌کند\&. برای گزینه‌های مشترک تمام فایل‌های پیکربندی واحد، \fBsystemd.unit\fR(5) را ببینید\&. موارد پیکربندی مشترک در بخش‌های عمومی [Unit] و [Install] پیکربندی می‌شوند\&. گزینه‌های پیکربندی مخصوص سرویس در بخش [Service] پیکربندی می‌شوند\&. .PP گزینه‌های اضافی در \fBsystemd.exec\fR(5) فهرست شده‌اند، که محیط اجرایی را که دستورات در آن اجرا می‌شوند تعریف می‌کند، و در \fBsystemd.kill\fR(5)، که نحوه خاتمه فرآیندهای سرویس را تعریف می‌کند، و در \fBsystemd.resource-control\fR(5)، که تنظیمات کنترل منابع را برای فرآیندهای سرویس پیکربندی می‌کند\&. .PP اگر سازگاری با SysV init فعال باشد، systemd به‌طور خودکار واحدهای سرویسی ایجاد می‌کند که اسکریپت‌های SysV init را در بر می‌گیرند (نام سرویس همان نام اسکریپت خواهد بود، با افزودن پسوند "\&.service")؛ \fBsystemd-sysv-generator\fR(8) را ببینید\&. .PP دستور \fBsystemd-run\fR(1) امکان ایجاد واحدهای \&.service و \&.scope را به‌طور پویا و گذرا از خط فرمان فراهم می‌کند\&. .SH "الگوهای سرویس (SERVICE TEMPLATES)" .PP امکان‌پذیر است که سرویس‌های \fBsystemd\fR یک آرگومان منفرد را از طریق نحو "\fIservice\fR@\fIargument\fR\&.service" دریافت کنند\&. چنین سرویس‌هایی، سرویس‌های «نمونه‌سازی‌شده» (instantiated) نامیده می‌شوند، در حالی که تعریف واحد بدون پارامتر \fIargument\fR یک «الگو» (template) نام دارد\&. برای نمونه می‌توان به الگوی سرویس dhcpcd@\&.service اشاره کرد که یک واسط شبکه را به عنوان پارامتر می‌گیرد تا یک سرویس نمونه‌سازی‌شده ایجاد کند\&. در درون فایل سرویس، به این پارامتر یا «نام نمونه» می‌توان با مشخص‌کننده‌های %\- دسترسی داشت\&. برای جزئیات، \fBsystemd.unit\fR(5) را ببینید\&. .SH "وابستگی‌های خودکار (AUTOMATIC DEPENDENCIES)" .SS "وابستگی‌های ضمنی (Implicit Dependencies)" .PP وابستگی‌های زیر به‌طور ضمنی اضافه می‌شوند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} سرویس‌هایی که \fIType=dbus\fR برای آن‌ها تنظیم شده است، به‌طور خودکار وابستگی‌هایی از نوع \fIRequires=\fR و \fIAfter=\fR به dbus\&.socket به دست می‌آورند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} سرویس‌های فعال‌شده توسط سوکت، به‌طور خودکار پس از واحدهای \&.socket فعال‌کننده خود از طریق یک وابستگی خودکار \fIAfter=\fR مرتب می‌شوند\&. سرویس‌ها همچنین تمام واحدهای \&.socket فهرست‌شده در \fISockets=\fR را از طریق وابستگی‌های خودکار \fIWants=\fR و \fIAfter=\fR فراخوانی می‌کنند\&. .RE .PP وابستگی‌های ضمنی اضافی ممکن است در نتیجه پارامترهای اجرا و کنترل منابع، همان‌گونه که در \fBsystemd.exec\fR(5) و \fBsystemd.resource-control\fR(5) مستند شده است، اضافه شوند\&. .SS "وابستگی‌های پیش‌فرض (Default Dependencies)" .PP وابستگی‌های زیر اضافه می‌شوند مگر اینکه \fIDefaultDependencies=no\fR تنظیم شده باشد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} واحدهای سرویس وابستگی‌هایی از نوع \fIRequires=\fR و \fIAfter=\fR به sysinit\&.target، یک وابستگی از نوع \fIAfter=\fR به basic\&.target و همچنین وابستگی‌هایی از نوع \fIConflicts=\fR و \fIBefore=\fR به shutdown\&.target خواهند داشت\&. این موارد تضمین می‌کنند که واحدهای سرویس عادی، مقداردهی اولیه پایه سیستم را فراخوانی کرده و پیش از خاموش شدن سیستم به‌طور پاک متوقف شوند\&. تنها سرویس‌هایی که در اوایل بوت یا اواخر خاموش شدن سیستم دخیل هستند باید این گزینه را غیرفعال کنند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} به واحدهای سرویس نمونه‌سازی‌شده (یعنی واحدهای سرویسی که در نام خود دارای "@" هستند) به‌طور پیش‌فرض یک واحد برش (slice unit) به ازای هر الگو اختصاص داده می‌شود (نگاه کنید به \fBsystemd.slice\fR(5))، که به نام واحد الگو نام‌گذاری شده و شامل تمام نمونه‌های آن الگوی خاص است\&. این برش معمولاً در زمان خاموش شدن سیستم به همراه تمام نمونه‌های الگو متوقف می‌شود\&. در صورتی که این رفتار مطلوب نباشد، \fIDefaultDependencies=no\fR را در واحد الگو تنظیم کنید، و یا یک فایل واحد برش اختصاصی به ازای هر الگو تعریف کنید که در آن نیز \fIDefaultDependencies=no\fR تنظیم شده باشد، یا \fISlice=system\&.slice\fR (یا برشی مناسب دیگر) را در واحد الگو تنظیم نمایید\&. همچنین به \fBsystemd.resource-control\fR(5) مراجعه کنید\&. .RE .SH "گزینه‌ها (OPTIONS)" .PP فایل‌های واحد سرویس ممکن است شامل بخش‌های [Unit] و [Install] باشند که در \fBsystemd.unit\fR(5) شرح داده شده‌اند\&. .PP فایل‌های واحد سرویس باید شامل یک بخش [Service] باشند که حامل اطلاعات مربوط به سرویس و فرآیندی است که بر آن نظارت دارد\&. تعدادی از گزینه‌هایی که ممکن است در این بخش استفاده شوند با سایر انواع واحد مشترک هستند\&. این گزینه‌ها در \fBsystemd.exec\fR(5)، \fBsystemd.kill\fR(5) و \fBsystemd.resource-control\fR(5) مستند شده‌اند\&. گزینه‌های مخصوص بخش [Service] واحدهای سرویس موارد زیر هستند: .PP \fIType=\fR .RS 4 سازوکاری را پیکربندی می‌کند که از طریق آن سرویس به مدیر سرویس اطلاع می‌دهد که راه‌اندازی سرویس به پایان رسیده است\&. یکی از مقادیر \fBsimple\fR، \fBexec\fR، \fBforking\fR، \fBoneshot\fR، \fBdbus\fR، \fBnotify\fR، \fBnotify\-reload\fR، یا \fBidle\fR: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر روی \fBsimple\fR تنظیم شود (مقدار پیش‌فرض در صورتی که \fIExecStart=\fR مشخص شده باشد اما هیچ‌کدام از \fIType=\fR یا \fIBusName=\fR مشخص نشده باشند، و از گواهی‌های اعتبارسنجی استفاده نشود)، مدیر سرویس بلافاصله پس از ایجاد فرآیند (fork) اصلی سرویس (یعنی بلافاصله پس از \fBfork()\fR و پیش از پیکربندی ویژگی‌های مختلف فرآیند و به‌ویژه قبل از اینکه فرآیند جدید \fBexecve()\fR را برای فراخوانی باینری واقعی سرویس اجرا کند)، واحد را شروع‌شده در نظر می‌گیرد\&. معمولاً \fIType=\fR\fBexec\fR انتخاب بهتری است، به زیر مراجعه کنید\&. .sp انتظار می‌رود فرآیندی که با \fIExecStart=\fR پیکربندی شده است، فرآیند اصلی سرویس باشد\&. در این حالت، اگر فرآیند قابلیت‌هایی را به سایر فرآیندهای روی سیستم ارائه می‌دهد، کانال‌های ارتباطی آن باید پیش از راه‌اندازی سرویس برقرار شوند (برای نمونه سوکت‌های راه‌اندازی‌شده توسط systemd، از طریق فعال‌سازی سوکت)، زیرا مدیر سرویس بلافاصله پس از ایجاد فرآیند اصلی سرویس و پیش از اجرای باینری سرویس، به سراغ راه‌اندازی واحدهای بعدی می‌رود\&. توجه داشته باشید که این بدان معناست که خطوط فرمان \fBsystemctl start\fR برای سرویس‌های \fBsimple\fR موفقیت را گزارش می‌دهند، حتی اگر باینری سرویس نتواند با موفقیت فراخوانی شود (برای مثال به این دلیل که \fIUser=\fR انتخاب‌شده وجود ندارد، یا باینری سرویس مفقود است)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} نوع \fBexec\fR شبیه به \fBsimple\fR است، اما مدیر سرویس بلافاصله پس از اجرای موفق باینری اصلی سرویس، واحد را شروع‌شده در نظر می‌گیرد\&. مدیر سرویس راه‌اندازی واحدهای بعدی را تا آن نقطه به تأخیر می‌اندازد\&. (یا به عبارت دیگر: \fBsimple\fR بلافاصله پس از بازگشت \fBfork()\fR به کارهای بعدی می‌پردازد، در حالی که \fBexec\fR تا زمانی که هر دو \fBfork()\fR و \fBexecve()\fR در فرآیند سرویس موفقیت‌آمیز نباشند ادامه نخواهد داد\&.) توجه داشته باشید که این بدان معناست که خطوط فرمان \fBsystemctl start\fR برای سرویس‌های \fBexec\fR در صورتی که باینری سرویس نتواند با موفقیت فراخوانی شود (برای مثال به این دلیل که \fIUser=\fR انتخاب‌شده وجود ندارد، یا باینری سرویس مفقود است) شکست را گزارش خواهند داد\&. این نوع در صورت استفاده از اعتبارسنجی‌ها (credentials) به‌طور ضمنی فرض می‌شود (برای جزئیات به \fILoadCredential=\fR در \fBsystemd.exec\fR(5) مراجعه کنید)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر روی \fBforking\fR تنظیم شود، مدیر سرویس بلافاصله پس از خروج باینری اولیه‌ای که توسط مدیر اجرا شده بود، واحد را شروع‌شده در نظر می‌گیرد\&. \fIاستفاده از این نوع توصیه نمی‌شود؛ در عوض از \fR\fI\fBnotify\fR\fR\fI، \fR\fI\fBnotify\-reload\fR\fR\fI، یا \fR\fI\fBdbus\fR\fR\fI استفاده کنید\&.\fR .sp انتظار می‌رود فرآیندی که با \fIExecStart=\fR پیکربندی شده است، به عنوان بخشی از راه‌اندازی خود \fBfork()\fR را فراخوانی کند\&. انتظار می‌رود پس از اتمام راه‌اندازی و برقراری تمام کانال‌های ارتباطی، فرآیند والد خارج شود\&. فرآیند فرزند به عنوان فرآیند اصلی سرویس به کار خود ادامه می‌دهد و مدیر سرویس هنگامی که فرآیند والد خارج شد واحد را شروع‌شده تلقی می‌کند\&. این رفتار سنتی سرویس‌های UNIX است\&. در صورت استفاده از این تنظیم، توصیه می‌شود از گزینه \fIPIDFile=\fR نیز استفاده کنید تا systemd بتواند فرآیند اصلی سرویس را به‌طور قابل اعتماد شناسایی کند\&. مدیر سرویس پس از خروج فرآیند والد، شروع واحدهای بعدی را آغاز خواهد کرد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} رفتار \fBoneshot\fR مشابه با \fBexec\fR است؛ با این حال، مدیر سرویس واحد را پس از خروج فرآیند اصلی بالا آمده در نظر می‌گیرد\&. سپس واحدهای بعدی را شروع می‌کند\&. \fIRemainAfterExit=\fR به‌ویژه برای این نوع سرویس بسیار کاربردی است\&. \fIType=\fR\fBoneshot\fR در صورتی که نه \fIType=\fR و نه \fIExecStart=\fR مشخص نشده باشند، پیش‌فرض ضمنی است\&. توجه داشته باشید که اگر از این گزینه بدون \fIRemainAfterExit=\fR استفاده شود، سرویس هرگز وارد وضعیت واحد "active" نخواهد شد، بلکه مستقیماً از "activating" به "deactivating" یا "dead" تغییر وضعیت می‌دهد، زیرا هیچ فرآیندی پیکربندی نشده است که به‌طور مداوم اجرا شود\&. به ویژه این بدان معناست که پس از اجرای سرویسی از این نوع (که \fIRemainAfterExit=\fR برای آن تنظیم نشده است)، بعداً به عنوان شروع‌شده نشان داده نخواهد شد، بلکه به عنوان مرده (dead) نشان داده می‌شود\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} رفتار \fBdbus\fR مشابه با \fBsimple\fR است؛ با این حال، واحدهای این نوع باید \fIBusName=\fR را مشخص کرده باشند و مدیر سرویس زمانی واحد را آماده تلقی می‌کند که نام گذرگاهِ مشخص‌شده تصاحب شده باشد\&. این نوع در صورت مشخص شدن \fIBusName=\fR پیش‌فرض است\&. .sp واحدهای سرویسی که این گزینه برای آن‌ها پیکربندی شده است به‌طور ضمنی وابستگی‌هایی به واحد dbus\&.socket به دست می‌آورند\&. یک واحد سرویس از این نوع تا زمانی که نام گذرگاه مشخص‌شده تصاحب نشود در وضعیت در حال فعال‌سازی (activating) در نظر گرفته می‌شود\&. تا زمانی که نام گذرگاه در دست باشد، فعال‌شده (activated) محسوب می‌شود\&. به محض اینکه نام گذرگاه رها شود، سرویس دیگر به عنوان کارکردی در نظر گرفته نمی‌شود که پیامد آن تلاش مدیر سرویس برای پایان دادن به فرآیندهای باقی‌مانده متعلق به سرویس است\&. بنابراین سرویس‌هایی که به عنوان بخشی از منطق خاموش شدن خود نام گذرگاه خود را رها می‌کنند، باید برای دریافت سیگنال \fBSIGTERM\fR (یا هر سیگنالی که در \fIKillSignal=\fR پیکربندی شده است) در نتیجه این امر آماده باشند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} رفتار \fBnotify\fR شبیه به \fBexec\fR است؛ با این حال، انتظار می‌رود که سرویس پس از اتمام راه‌اندازی، یک پیام اعلان "READY=1" را از طریق \fBsd_notify\fR(3) یا فراخوانی معادل آن ارسال کند\&. systemd پس از ارسال این پیام اعلان، راه‌اندازی واحدهای بعدی را ادامه خواهد داد\&. در صورت استفاده از این گزینه، \fINotifyAccess=\fR (به زیر مراجعه کنید) باید برای باز کردن دسترسی به سوکت اعلان ارائه‌شده توسط systemd تنظیم شود\&. اگر \fINotifyAccess=\fR وجود نداشته باشد یا روی \fBnone\fR تنظیم شده باشد، به‌طور اجباری روی \fBmain\fR تنظیم خواهد شد\&. .sp اگر سرویس از بارگذاری مجدد (reloading) پشتیبانی می‌کند و از یک سیگنال برای شروع بارگذاری مجدد استفاده می‌کند، استفاده از \fBnotify\-reload\fR در عوض توصیه می‌شود\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} رفتار \fBnotify\-reload\fR مشابه \fBnotify\fR است، با یک تفاوت: هنگامی که از سرویس درخواست بارگذاری مجدد می‌شود، سیگنال فرآیند یونیکس \fBSIGHUP\fR به فرآیند اصلی سرویس ارسال می‌شود و مدیر منتظر اعلانی مبنی بر پایان بارگذاری مجدد می‌ماند\&. .sp هنگام آغاز فرآیند بارگذاری مجدد، انتظار می‌رود سرویس با یک پیام اعلان از طریق \fBsd_notify\fR(3) پاسخ دهد که شامل فیلد "RELOADING=1" به همراه "MONOTONIC_USEC=" تنظیم‌شده روی زمان یکنواخت کنونی (یعنی \fBCLOCK_MONOTONIC\fR در \fBclock_gettime\fR(2)) به میکروثانیه، قالب‌بندی‌شده به عنوان یک رشته ده‌دهی باشد\&. پس از تکمیل بارگذاری مجدد، پیام اعلان دیگری باید ارسال شود که حاوی "READY=1" باشد\&. استفاده از این نوع سرویس و پیاده‌سازی این پروتکل بارگذاری مجدد، جایگزینی کارآمد برای ارائه دستور \fIExecReload=\fR جهت بارگذاری مجدد پیکربندی سرویس است\&. .sp سیگنالی که باید ارسال شود را می‌توان از طریق \fIReloadSignal=\fR تغییر داد، به زیر مراجعه کنید\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} رفتار \fBidle\fR بسیار شبیه به \fBsimple\fR است؛ با این حال، اجرای واقعی برنامه سرویس تا زمان اعزام تمام کارهای فعال به تأخیر می‌افتد\&. این ویژگی ممکن است برای جلوگیری از تداخل خروجی سرویس‌های شل با خروجی وضعیت روی کنسول استفاده شود\&. توجه داشته باشید که این نوع صرفاً برای بهبود خروجی کنسول مفید است، و به عنوان یک ابزار کلی برای ترتیب‌بندی واحدها کاربردی ندارد، و اثر این نوع سرویس مشمول یک مهلت ۵ ثانیه‌ای است که پس از آن برنامه سرویس به هر حال فراخوانی می‌شود\&. .RE .sp توصیه می‌شود از \fIType=\fR\fBexec\fR برای سرویس‌های با اجرای طولانی استفاده شود، زیرا تضمین می‌کند که خطاهای راه‌اندازی فرآیند (مانند خطاهایی چون نبود فایل اجرایی سرویس، یا مفقود بودن کاربر) به درستی ردیابی شوند\&. با این حال، از آنجا که این نوع سرویس خرابی‌های درون کد راه‌اندازی خود سرویس را منتشر نمی‌کند (برخلاف خرابی‌ها در مراحل مقدماتی که مدیر سرویس قبل از \fBexecve()\fR اجرا می‌کند) و اجازه ترتیب‌بندی سایر واحدها را بر اساس تکمیل مقداردهی اولیه کد خود سرویس نمی‌دهد (که به عنوان مثال زمانی مفید است که کلاینت‌ها نیاز دارند از طریق نوعی از IPC به سرویس متصل شوند، و کانال IPC تنها توسط خود سرویس ایجاد می‌شود \(em در مقایسه با انجام این کار از قبل از طریق فعال‌سازی سوکت یا گذرگاه یا موارد مشابه)، ممکن است برای بسیاری از موارد کافی نباشد\&. در این صورت، \fBnotify\fR، \fBnotify\-reload\fR، یا \fBdbus\fR (مورد اخیر فقط در صورتی که سرویس یک واسط D-Bus ارائه دهد) گزینه‌های ترجیحی هستند زیرا به کد برنامه سرویس اجازه می‌دهند دقیقاً زمان شروع موفقیت‌آمیز سرویس و زمان ادامه کار با واحدهای بعدی را زمان‌بندی کند\&. انواع سرویس \fBnotify\fR/\fBnotify\-reload\fR نیازمند پشتیبانی صریح در پایه‌کد سرویس هستند (زیرا \fBsd_notify()\fR یا یک API معادل باید توسط سرویس در زمان مناسب فراخوانی شود) \(em اگر پشتیبانی نشود، \fBforking\fR یک جایگزین است: از پروتکل سنتی و سنگین راه‌اندازی سرویس‌های UNIX پشتیبانی می‌کند\&. توجه داشته باشید که استفاده از هر نوع دیگری به جز \fBsimple\fR احتمالاً فرآیند بوت را به تأخیر می‌اندازد، زیرا مدیر سرویس باید حداقل منتظر بماند تا بخشی از مقداردهی اولیه سرویس تکمیل شود\&. (همچنین توجه داشته باشید که معمولاً استفاده از \fBidle\fR یا \fBoneshot\fR برای سرویس‌های با اجرای طولانی توصیه نمی‌شود\&.) .sp توجه داشته باشید که تنظیمات مختلف سرویس (مانند \fIUser=\fR، \fIGroup=\fR از طریق libc NSS) ممکن است در هنگام استفاده منجر به فراخوانی‌های IPC مسدودکننده «پنهان» به سایر سرویس‌ها شود\&. گاهی اوقات ممکن است توصیه شود از نوع سرویس \fBsimple\fR استفاده شود تا اطمینان حاصل شود که منطق تراکنش مدیر سرویس تحت تأثیر چنین عملیات بالقوه کند و وابستگی‌های پنهانی قرار نمی‌گیرد، زیرا این تنها نوع سرویسی است که در آن مدیر سرویس پیش از ادامه کار منتظر تکمیل چنین عملیات راه‌اندازی اجرای سرویس نخواهد ماند\&. .RE .PP \fIExitType=\fR .RS 4 مشخص می‌کند که مدیر چه زمانی باید سرویس را پایان‌یافته در نظر بگیرد\&. یکی از مقادیر \fBmain\fR یا \fBcgroup\fR: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر روی \fBmain\fR (مقدار پیش‌فرض) تنظیم شود، مدیر سرویس زمانی که فرآیند اصلی (که بر اساس \fIType=\fR تعیین می‌شود) خارج شد، واحد را متوقف‌شده تلقی می‌کند\&. در نتیجه، نمی‌توان از آن همراه با \fIType=\fR\fBoneshot\fR استفاده کرد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر روی \fBcgroup\fR تنظیم شود، سرویس تا زمانی که حداقل یک فرآیند در cgroup خارج نشده باشد، در حال اجرا تلقی می‌شود\&. .RE .sp معمولاً توصیه می‌شود زمانی که یک سرویس دارای مدل انشعاب (forking) مشخص است و یک فرآیند اصلی را می‌توان به‌طور قابل اعتماد تعیین کرد، از \fIExitType=\fR\fBmain\fR استفاده شود\&. \fIExitType=\fR\fBcgroup\fR برای برنامه‌هایی در نظر گرفته شده است که مدل انشعاب آن‌ها از قبل مشخص نیست و ممکن است فرآیند اصلی مشخصی نداشته باشند\&. این گزینه برای سرویس‌های گذرا یا خودکار تولیدشده، مانند برنامه‌های گرافیکی درون یک محیط دسکتاپ، بسیار مناسب است\&. .sp در نسخه 250 اضافه شد\&. .RE .PP \fIRemainAfterExit=\fR .RS 4 یک مقدار بولی می‌گیرد که مشخص می‌کند آیا سرویس حتی زمانی که تمام فرآیندهای آن خارج شده‌اند باید فعال در نظر گرفته شود یا خیر\&. مقدار پیش‌فرض \fBno\fR است\&. .RE .PP \fIGuessMainPID=\fR .RS 4 یک مقدار بولی می‌گیرد که مشخص می‌کند آیا systemd در صورتی که نتواند PID اصلی یک سرویس را به‌طور قابل اعتماد تعیین کند، باید سعی در حدس زدن آن داشته باشد یا خیر\&. این گزینه نادیده گرفته می‌شود مگر اینکه \fBType=forking\fR تنظیم شده باشد و \fBPIDFile=\fR تنظیم نشده باشد، زیرا برای سایر انواع یا با یک فایل PID که به‌طور صریح پیکربندی شده است، PID اصلی همیشه مشخص است\&. الگوریتم حدس زدن در صورتی که یک دیمن از بیش از یک فرآیند تشکیل شده باشد ممکن است به نتایج نادرستی برسد\&. اگر نتوان PID اصلی را تعیین کرد، تشخیص خرابی و راه‌اندازی مجدد خودکار یک سرویس به‌طور قابل اعتماد کار نخواهد کرد\&. مقدار پیش‌فرض \fByes\fR است\&. .RE .PP \fIPIDFile=\fR .RS 4 مسیری را می‌گیرد که به فایل PID سرویس اشاره دارد\&. استفاده از این گزینه برای سرویس‌هایی که \fIType=\fR آن‌ها روی \fBforking\fR تنظیم شده است توصیه می‌شود\&. مسیر مشخص‌شده معمولاً به فایلی در زیر /run/ اشاره می‌کند\&. بنابراین اگر یک مسیر نسبی برای سرویس سیستمی مشخص شود، با /run/ پیشوندگذاری می‌شود، و اگر در یک سرویس کاربری مشخص شود، با $XDG_RUNTIME_DIR پیشوندگذاری می‌گردد\&. مدیر سرویس پس از راه‌اندازی سرویس، PID فرآیند اصلی سرویس را از این فایل می‌خواند\&. مدیر سرویس در فایلی که در اینجا پیکربندی شده است نمی‌نویسد، اگرچه پس از خاموش شدن سرویس در صورت باقی ماندن فایل، آن را حذف خواهد کرد\&. فایل PID نیازی نیست که متعلق به یک کاربر دارای امتیاز باشد، اما اگر متعلق به یک کاربر غیرممتاز باشد، محدودیت‌های امنیتی اضافی اعمال می‌شود: فایل نباید یک پیوند نمادین به فایلی متعلق به کاربری دیگر باشد (نه به‌طور مستقیم و نه غیرمستقیم)، و فایل PID باید به فرآیندی اشاره کند که از قبل متعلق به سرویس است\&. .sp توجه داشته باشید که در پروژه‌های مدرن باید از فایل‌های PID اجتناب شود\&. در صورت امکان از \fBType=notify\fR، \fBType=notify\-reload\fR یا \fBType=simple\fR استفاده کنید، که برای تعیین فرآیند اصلی سرویس نیازی به استفاده از فایل‌های PID ندارند و از انشعاب‌های غیرضروری جلوگیری می‌کنند\&. .RE .PP \fIBusName=\fR .RS 4 یک نام مقصد D-Bus را می‌گیرد که این سرویس باید از آن استفاده کند\&. این گزینه برای سرویس‌هایی که \fIType=\fR آن‌ها روی \fBdbus\fR تنظیم شده است، اجباری است\&. توصیه می‌شود همیشه در صورت مشخص بودن، این ویژگی را تنظیم کنید تا نگاشت نام سرویس به مقصد D-Bus آسان شود\&. به‌ویژه، افعال \fBsystemctl service\-log\-level/service\-log\-target\fR از این قابلیت استفاده می‌کنند\&. .RE .PP \fIExecStart=\fR .RS 4 دستوراتی که هنگام شروع این سرویس اجرا می‌شوند\&. .sp مگر اینکه \fIType=\fR برابر با \fBoneshot\fR باشد، دقیقاً یک دستور باید داده شود\&. هنگامی که \fIType=oneshot\fR استفاده می‌شود، این تنظیم ممکن است چندین بار برای تعریف چندین دستور جهت اجرا استفاده شود\&. اگر رشته خالی به این گزینه اختصاص داده شود، فهرست دستورات برای شروع بازنشانی می‌شود و انتساب‌های قبلی این گزینه بی‌اثر خواهند بود\&. اگر هیچ \fIExecStart=\fR مشخص نشده باشد، سرویس باید دارای \fIRemainAfterExit=yes\fR و حداقل یک خط \fIExecStop=\fR تنظیم‌شده باشد\&. (سرویس‌هایی که فاقد هر دو \fIExecStart=\fR و \fIExecStop=\fR باشند معتبر نیستند\&.) .sp اگر بیش از یک دستور پیکربندی شده باشد، دستورات به ترتیب ترتیبی که در فایل واحد ظاهر می‌شوند فراخوانی می‌گردند\&. اگر یکی از دستورات با شکست مواجه شود (و پیشوند "\-" نداشته باشد)، خطوط دیگر اجرا نمی‌شوند و واحد ناموفق تلقی می‌شود\&. .sp مگر اینکه \fIType=forking\fR تنظیم شده باشد، فرآیندی که از طریق این خط فرمان شروع می‌شود فرآیند اصلی دیمن در نظر گرفته خواهد شد\&. .RE .PP \fIExecStartPre=\fR, \fIExecStartPost=\fR .RS 4 دستورات اضافی که به ترتیب قبل یا بعد از دستور موجود در \fIExecStart=\fR اجرا می‌شوند\&. نحو مانند \fIExecStart=\fR است\&. خطوط فرمان چندگانه بدون توجه به نوع سرویس (یعنی \fIType=\fR) مجاز هستند و دستورات به صورت متوالی و یکی پس از دیگری اجرا می‌شوند\&. .sp اگر هر یک از آن دستورات (که پیشوند "\-" ندارند) با شکست مواجه شوند، بقیه اجرا نمی‌شوند و واحد ناموفق تلقی می‌شود\&. .sp دستورات \fIExecStart=\fR تنها پس از اینکه تمام دستورات \fIExecStartPre=\fR که پیشوند "\-" نداشتند با موفقیت خارج شدند، اجرا می‌شوند\&. .sp دستورات \fIExecStartPost=\fR تنها پس از فراخوانی موفقیت‌آمیز دستورات مشخص‌شده در \fIExecStart=\fR، همان‌طور که توسط \fIType=\fR تعیین می‌شود اجرا می‌گردند (یعنی فرآیند برای \fIType=simple\fR یا \fIType=idle\fR شروع شده باشد، آخرین فرآیند \fIExecStart=\fR برای \fIType=oneshot\fR با موفقیت خارج شده باشد، فرآیند اولیه برای \fIType=forking\fR با موفقیت خارج شده باشد، "READY=1" برای \fIType=notify\fR/\fIType=notify\-reload\fR ارسال شده باشد، یا \fIBusName=\fR برای \fIType=dbus\fR تصاحب شده باشد)\&. .sp توجه داشته باشید که \fIExecStartPre=\fR نباید برای شروع فرآیندهای با اجرای طولانی استفاده شود\&. تمام فرآیندهایی که توسط فرآیندهای فراخوانی‌شده از طریق \fIExecStartPre=\fR انشعاب یافته‌اند، قبل از اجرای فرآیند بعدی سرویس کشته خواهند شد\&. .sp توجه داشته باشید که اگر هر یک از دستورات مشخص‌شده در \fIExecStartPre=\fR، \fIExecStart=\fR یا \fIExecStartPost=\fR با شکست مواجه شوند (و پیشوند "\-" نداشته باشند، بالا را ببینید) یا قبل از بالا آمدن کامل سرویس مهلت زمانی آن‌ها به پایان برسد، اجرا با دستورات مشخص‌شده در \fIExecStopPost=\fR ادامه می‌یابد و از دستورات موجود در \fIExecStop=\fR صرف‌نظر می‌شود\&. .sp توجه داشته باشید که اجرای \fIExecStartPost=\fR به منظور قیدهای ترتیب‌بندی \fIBefore=\fR/\fIAfter=\fR در نظر گرفته می‌شود\&. .RE .PP \fIExecCondition=\fR .RS 4 دستورات اختیاری که قبل از دستورات موجود در \fIExecStartPre=\fR اجرا می‌شوند\&. نحو مانند \fIExecStart=\fR است\&. خطوط فرمان چندگانه بدون توجه به نوع سرویس (یعنی \fIType=\fR) مجاز هستند و دستورات به صورت متوالی و یکی پس از دیگری اجرا می‌شوند\&. .sp رفتار این گزینه شبیه ترکیبی از \fIExecStartPre=\fR و بررسی شرط است: هنگامی که یک دستور \fIExecCondition=\fR با کد خروج ۱ تا ۲۵۴ (شامل هر دو) خارج می‌شود، دستورات باقی‌مانده نادیده گرفته می‌شوند و واحد به عنوان ناموفق علامت‌گذاری \fIنمی‌شود\fR\&. با این حال، اگر یک دستور \fIExecCondition=\fR با کد ۲۵۵ یا به صورت غیرعادی (مانند اتمام مهلت زمانی، کشته شدن توسط سیگنال و غیره) خارج شود، واحد ناموفق تلقی می‌شود (و دستورات باقی‌مانده نادیده گرفته می‌شوند)\&. کد خروج ۰ یا آن‌هایی که با \fISuccessExitStatus=\fR مطابقت دارند، اجرا را به سمت دستورات بعدی ادامه خواهند داد\&. .sp همان توصیه‌ها درباره عدم اجرای فرآیندهای با اجرای طولانی در \fIExecStartPre=\fR برای \fIExecCondition=\fR نیز صدق می‌کند\&. \fIExecCondition=\fR همچنین در صورت هرگونه خروج غیر صفر یا غیرعادی، مانند موارد توصیف‌شده در بالا، دستورات موجود در \fIExecStopPost=\fR را به عنوان بخشی از توقف سرویس اجرا خواهد کرد\&. .sp در نسخه 243 اضافه شد\&. .RE .PP \fIExecReload=\fR .RS 4 دستوراتی برای اجرا جهت فعال‌سازی بارگذاری مجدد پیکربندی در سرویس\&. این آرگومان چندین خط فرمان را با پیروی از همان طرح توصیف‌شده برای \fIExecStart=\fR در بالا می‌پذیرد\&. استفاده از این تنظیم اختیاری است\&. جایگزینی مشخص‌کننده‌ها و متغیرهای محیطی با پیروی از همان طرح \fIExecStart=\fR پشتیبانی می‌شود\&. .sp یک متغیر محیطی ویژه اضافی تنظیم شده است: در صورت مشخص بودن، \fI$MAINPID\fR روی فرآیند اصلی دیمن تنظیم می‌شود و ممکن است برای خطوط فرمانی مانند خط زیر استفاده شود: .sp .if n \{\ .RS 4 .\} .nf ExecReload=kill \-HUP $MAINPID .fi .if n \{\ .RE .\} .sp با این حال، توجه داشته باشید که بارگذاری مجدد دیمن از طریق صف‌بندی یک سیگنال (مانند خط نمونه بالا) معمولاً انتخاب خوبی نیست، زیرا این یک عملیات ناهمگام است و بنابراین هنگام ترتیب‌بندی بارگذاری مجدد چندین سرویس نسبت به یکدیگر مناسب نیست\&. بنابراین اکیداً توصیه می‌شود که یا از \fIType=\fR\fBnotify\-reload\fR به جای \fIExecReload=\fR استفاده شود، یا \fIExecReload=\fR روی دستوری تنظیم گردد که نه تنها بارگذاری مجدد پیکربندی دیمن را آغاز کند، بلکه به‌طور همگام منتظر تکمیل آن بماند\&. برای مثال، \fBdbus-broker R(1) از موارد زیر استفاده می‌کند: .sp .if n \{\ .RS 4 .\} .nf ExecReload=busctl call org\&.freedesktop\&.DBus \e /org/freedesktop/DBus org\&.freedesktop\&.DBus \e ReloadConfig .fi .if n \{\ .RE .\} .RE .PP \fIExecStop=\fR .RS 4 دستوراتی برای اجرا جهت متوقف کردن سرویس شروع‌شده از طریق \fIExecStart=\fR\&. این آرگومان چندین خط فرمان را با پیروی از همان طرح توصیف‌شده برای \fIExecStart=\fR در بالا می‌پذیرد\&. استفاده از این تنظیم اختیاری است\&. پس از اجرای دستورات پیکربندی‌شده در این گزینه، فرض می‌شود که سرویس متوقف شده است و فرآیندهای باقی‌مانده برای آن طبق تنظیم \fIKillMode=\fR خاتمه می‌یابند (به \fBsystemd.kill\fR(5) مراجعه کنید)\&. اگر این گزینه مشخص نشده باشد، فرآیند با ارسال سیگنال مشخص‌شده در \fIKillSignal=\fR یا \fIRestartKillSignal=\fR هنگام درخواست توقف سرویس خاتمه می‌یابد\&. جایگزینی مشخص‌کننده و متغیرهای محیطی پشتیبانی می‌شود (از جمله \fI$MAINPID\fR، بالا را ببینید)\&. .sp توجه داشته باشید که معمولاً مشخص کردن دستوری برای این تنظیم که صرفاً از سرویس درخواست خاتمه کند (برای مثال با ارسال نوعی سیگنال خاتمه به آن)، اما منتظر انجام آن نماند، کافی نیست\&. از آنجا که فرآیندهای باقی‌مانده سرویس طبق \fIKillMode=\fR و \fIKillSignal=\fR یا \fIRestartKillSignal=\fR همان‌طور که در بالا توصیف شد بلافاصله پس از خروج دستور کشته می‌شوند، این ممکن است منجر به یک توقف پاک نشود\&. بنابراین دستور مشخص‌شده باید یک عملیات همگام باشد، نه ناهمگام\&. .sp توجه داشته باشید که دستورات مشخص‌شده در \fIExecStop=\fR تنها زمانی اجرا می‌شوند که سرویس ابتدا با موفقیت شروع شده باشد\&. اگر سرویس اصلاً شروع نشده باشد، یا در صورتی که راه‌اندازی آن با شکست مواجه شده باشد (برای مثال به این دلیل که هر یک از دستورات مشخص‌شده در \fIExecStart=\fR، \fIExecStartPre=\fR یا \fIExecStartPost=\fR با شکست مواجه شده باشند [و پیشوند "\-" نداشته باشند، بالا را ببینید] یا مهلت زمانی آن‌ها سپری شده باشد)، فراخوانی نمی‌شوند\&. برای فراخوانی دستورات در زمانی که راه‌اندازی سرویس به درستی انجام نشده و مجدداً خاموش می‌شود، از \fIExecStopPost=\fR استفاده کنید\&. همچنین توجه داشته باشید که عملیات توقف همیشه در صورتی که سرویس با موفقیت شروع شده باشد انجام می‌شود، حتی اگر فرآیندهای موجود در سرویس خودبه‌خود خاتمه یافته باشند یا کشته شده باشند\&. دستورات توقف باید برای مواجهه با چنین حالتی آماده باشند\&. در صورتی که systemd بداند فرآیند اصلی در زمان فراخوانی دستورات توقف خارج شده است، \fI$MAINPID\fR تنظیم‌نشده خواهد بود\&. .sp درخواست‌های راه‌اندازی مجدد سرویس به صورت عملیات توقف و به دنبال آن عملیات شروع پیاده‌سازی می‌شوند\&. این بدان معناست که \fIExecStop=\fR و \fIExecStopPost=\fR در طول عملیات راه‌اندازی مجدد سرویس اجرا می‌شوند\&. .sp توصیه می‌شود از این تنظیم برای دستوراتی استفاده شود که با سرویس ارتباط برقرار کرده و درخواست خاتمه پاک دارند\&. برای مراحل پاک‌سازی پس از توقف، در عوض از \fIExecStopPost=\fR استفاده کنید\&. .RE .PP \fIExecStopPost=\fR .RS 4 دستورات اضافی که پس از توقف سرویس اجرا می‌شوند\&. این شامل مواردی است که در آن‌ها دستورات پیکربندی‌شده در \fIExecStop=\fR استفاده شده‌اند، یا سرویس هیچ \fIExecStop=\fR تعریف‌شده‌ای ندارد، یا سرویس به صورت غیرمنتظره خارج شده است\&. این آرگومان چندین خط فرمان را با پیروی از همان طرح توصیف‌شده برای \fIExecStart=\fR می‌پذیرد\&. استفاده از این تنظیمات اختیاری است\&. جایگزینی مشخص‌کننده و متغیرهای محیطی پشتیبانی می‌شود\&. توجه داشته باشید که \(em برعکس \fIExecStop=\fR \(em دستورات مشخص‌شده با این تنظیم هنگامی فراخوانی می‌شوند که راه‌اندازی سرویس به درستی انجام نشده و دوباره خاموش شده باشد\&. .sp توصیه می‌شود از این تنظیم برای عملیات پاک‌سازی استفاده شود که باید حتی در صورت عدم موفقیت در راه‌اندازی صحیح سرویس نیز اجرا شوند\&. دستورات پیکربندی‌شده با این تنظیم باید بتوانند حتی اگر سرویس در نیمه راه راه‌اندازی با شکست مواجه شده و داده‌های ناقص مقداردهی‌شده باقی گذاشته باشد، کار کنند\&. از آنجا که فرآیندهای سرویس احتمالاً هنگام اجرای دستورات مشخص‌شده با این تنظیم از قبل خارج شده‌اند، نباید سعی کنند با آن‌ها ارتباط برقرار نمایند\&. .sp توجه داشته باشید که تمام دستوراتی که با این تنظیم پیکربندی شده‌اند با کد نتیجه سرویس، و همچنین کد خروج و وضعیت فرآیند اصلی، که در متغیرهای محیطی \fI$SERVICE_RESULT\fR، \fI$EXIT_CODE\fR و \fI$EXIT_STATUS\fR تنظیم شده‌اند فراخوانی می‌شوند؛ برای جزئیات به \fBsystemd.exec\fR(5) مراجعه کنید\&. .sp توجه داشته باشید که اجرای \fIExecStopPost=\fR به منظور قیدهای ترتیب‌بندی \fIBefore=\fR/\fIAfter=\fR در نظر گرفته می‌شود\&. .RE .PP \fIRestartSec=\fR .RS 4 مدت زمان مکث قبل از راه‌اندازی مجدد یک سرویس (همان‌طور که با \fIRestart=\fR پیکربندی شده است) را تنظیم می‌کند\&. یک مقدار بدون واحد بر حسب ثانیه، یا یک مقدار بازه زمانی مانند "5min 20s" می‌گیرد\&. مقدار پیش‌فرض 100ms است\&. .RE .PP \fIRestartSteps=\fR .RS 4 تعداد گام‌های نمایی را برای افزایش فاصله بین راه‌اندازی‌های مجدد خودکار از \fIRestartSec=\fR به \fIRestartMaxDelaySec=\fR پیکربندی می‌کند\&. یک عدد صحیح مثبت یا 0 برای غیرفعال کردن آن می‌گیرد\&. پیش‌فرض 0 است\&. \fIراهنمایی: R مقادیر بین ۳ و ۵ انتخاب‌های خوبی هستند زمانی که عقب‌نشینی نمایی (exponential backoff) مورد نظر است\&. .sp مثال: .sp .if n \{\ .RS 4 .\} .nf RestartSec=10s RestartSteps=4 RestartMaxDelaySec=160s .fi .if n \{\ .RE .\} .sp این مقادیر فاصله‌های راه‌اندازی مجدد زیر را ایجاد می‌کند: 10s، 20s، 40s، 80s، 160s، 160s، 160s و غیره\&. به درون‌یابی هندسی و نسبت ثابت حاصل میان بازه‌ها توجه کنید؛ در اینجا ۲ است\&. فرمول برای \fIratio\fR عبارت است از (\fIRestartMaxDelaySec\fR / \fIRestartSec\fR)^(1 / \fIRestartSteps\fR)\&. یک تأخیر (تکرارشونده) برابر با \fIRestartMaxDelaySec=\fR همیشه پس از \fIRestartSteps\fR + 1 گام به دست می‌آید\&. .sp این تنظیم تنها در صورتی مؤثر است که \fIRestartMaxDelaySec=\fR نیز تنظیم شده باشد و \fIRestartSec=\fR صفر نباشد\&. .sp در نسخه 254 اضافه شد\&. .RE .PP \fIRestartMaxDelaySec=\fR .RS 4 طولانی‌ترین زمان مکث قبل از راه‌اندازی مجدد یک سرویس را با افزایش بازه توسط \fIRestartSteps=\fR پیکربندی می‌کند\&. مقداری با همان قالب \fIRestartSec=\fR، یا "infinity" را برای غیرفعال کردن تنظیم می‌گیرد\&. مقدار پیش‌فرض "infinity" است\&. .sp این تنظیم تنها در صورتی مؤثر است که \fIRestartSteps=\fR نیز تنظیم شده باشد و \fIRestartSec=\fR صفر نباشد\&. .sp در نسخه 254 اضافه شد\&. .RE .PP \fITimeoutStartSec=\fR .RS 4 زمان انتظار برای راه‌اندازی را پیکربندی می‌کند\&. اگر یک سرویس دیمن اتمام راه‌اندازی را در مدت زمان پیکربندی‌شده اعلام نکند، سرویس ناموفق در نظر گرفته شده و دوباره خاموش خواهد شد\&. اقدام دقیق به گزینه \fITimeoutStartFailureMode=\fR بستگی دارد\&. یک مقدار بدون واحد بر حسب ثانیه، یا یک مقدار بازه زمانی مانند "5min 20s" می‌گیرد\&. برای غیرفعال کردن منطق مهلت زمانی، "infinity" را ارسال کنید\&. مقدار پیش‌فرض آن \fIDefaultTimeoutStartSec=\fR تنظیم‌شده در مدیر است، مگر در مواردی که از \fIType=oneshot\fR استفاده شود، که در این صورت مهلت زمانی به‌طور پیش‌فرض غیرفعال است (به \fBsystemd-system.conf\fR(5) مراجعه کنید)\&. .sp اگر سرویسی از \fIType=notify\fR/\fIType=notify\-reload\fR پیام "EXTEND_TIMEOUT_USEC=\&..." را ارسال کند، ممکن است باعث شود زمان راه‌اندازی فراتر از \fITimeoutStartSec=\fR تمدید شود\&. اولین دریافت این پیام باید قبل از فراتر رفتن از \fITimeoutStartSec=\fR رخ دهد، و پس از تمدید زمان راه‌اندازی فراتر از \fITimeoutStartSec=\fR، مدیر سرویس به سرویس اجازه می‌دهد تا به راه‌اندازی خود ادامه دهد، مشروط بر اینکه سرویس پیام "EXTEND_TIMEOUT_USEC=\&..." را در بازه زمانی مشخص‌شده تکرار کند تا زمانی که وضعیت راه‌اندازی سرویس با "READY=1" پایان یابد (نگاه کنید به \fBsd_notify\fR(3))\&. .sp توجه داشته باشید که مهلت زمانی راه‌اندازی برای بارگذاری مجدد سرویس نیز اعمال می‌شود، صرف‌نظر از اینکه از طریق \fIExecReload=\fR پیاده‌سازی شده باشد یا از طریق منطق بارگذاری مجدد فعال‌شده از طریق \fIType=notify\-reload\fR\&. اگر بارگذاری مجدد در مدت زمان پیکربندی‌شده تکمیل نشود، بارگذاری مجدد ناموفق در نظر گرفته می‌شود و سرویس به اجرای خود با پیکربندی قدیمی ادامه می‌دهد\&. این امر بر سرویس در حال اجرا تأثیری نخواهد گذاشت، اما ثبت وقایع شده و برای مثال باعث شکست \fBsystemctl reload\fR خواهد شد\&. .sp در نسخه 188 اضافه شد\&. .RE .PP \fITimeoutStopSec=\fR .RS 4 این گزینه دو هدف را دنبال می‌کند\&. ابتدا، زمان انتظار برای هر دستور \fIExecStop=\fR را پیکربندی می‌کند\&. اگر مهلت زمانی هر یک از آن‌ها به پایان برسد، از دستورات بعدی \fIExecStop=\fR صرف‌نظر شده و سرویس با \fBSIGTERM\fR خاتمه می‌یابد\&. اگر هیچ دستور \fIExecStop=\fR مشخص نشده باشد، سرویس بلافاصله \fBSIGTERM\fR را دریافت می‌کند\&. این رفتار پیش‌فرض را می‌توان با گزینه \fITimeoutStopFailureMode=\fR تغییر داد\&. دوم اینکه، زمان انتظار برای متوقف شدن خود سرویس را پیکربندی می‌کند\&. اگر در زمان مشخص‌شده خاتمه نیابد، با \fBSIGKILL\fR به‌طور اجباری خاتمه داده می‌شود (به \fIKillMode=\fR در \fBsystemd.kill\fR(5) مراجعه کنید)\&. یک مقدار بدون واحد بر حسب ثانیه، یا یک مقدار بازه زمانی مانند "5min 20s" می‌گیرد\&. برای غیرفعال کردن منطق مهلت زمانی، "infinity" را ارسال کنید\&. مقدار پیش‌فرض آن \fIDefaultTimeoutStopSec=\fR از فایل پیکربندی مدیر است (به \fBsystemd-system.conf\fR(5) مراجعه کنید)\&. .sp اگر سرویسی از \fIType=notify\fR/\fIType=notify\-reload\fR پیام "EXTEND_TIMEOUT_USEC=\&..." را ارسال کند، ممکن است باعث شود زمان توقف فراتر از \fITimeoutStopSec=\fR تمدید شود\&. اولین دریافت این پیام باید قبل از فراتر رفتن از \fITimeoutStopSec=\fR رخ دهد، و پس از تمدید زمان توقف فراتر از \fITimeoutStopSec=\fR، مدیر سرویس به سرویس اجازه می‌دهد تا به توقف خود ادامه دهد، مشروط بر اینکه سرویس پیام "EXTEND_TIMEOUT_USEC=\&..." را در بازه زمانی مشخص‌شده تکرار کند، یا خود خاتمه یابد (نگاه کنید به \fBsd_notify\fR(3))\&. .sp در نسخه 188 اضافه شد\&. .RE .PP \fITimeoutAbortSec=\fR .RS 4 این گزینه زمان انتظار برای خاتمه سرویس را در هنگامی که به دلیل اتمام مهلت دیده‌بان (watchdog timeout) متوقف شده است، پیکربندی می‌کند (به \fIWatchdogSec=\fR مراجعه کنید)\&. اگر سرویس دارای \fITimeoutStopSec=\fR کوتاهی باشد، می‌توان از این گزینه استفاده کرد تا زمان بیشتری به سیستم برای نوشتن یک تخلیه حافظه (core dump) از سرویس داده شود\&. پس از انقضا، سرویس با \fBSIGKILL\fR به‌طور اجباری خاتمه داده می‌شود (به \fIKillMode=\fR در \fBsystemd.kill\fR(5) مراجعه کنید)\&. در این حالت فایل هسته کوتاه (truncated) خواهد شد\&. از \fITimeoutAbortSec=\fR برای تنظیم یک مهلت زمانی معقول برای تخلیه حافظه به ازای هر سرویس استفاده کنید که به اندازه کافی بزرگ باشد تا تمام داده‌های مورد انتظار را بنویسد و در عین حال به اندازه کافی کوتاه باشد تا خرابی سرویس را در زمان مناسب مدیریت کند\&. .sp یک مقدار بدون واحد بر حسب ثانیه، یا یک مقدار بازه زمانی مانند "5min 20s" می‌گیرد\&. یک مقدار خالی برای صرف‌نظر از مدیریت مهلت توقف اختصاصی دیده‌بان و بازگشت به \fITimeoutStopSec=\fR ارسال کنید\&. برای غیرفعال کردن منطق مهلت زمانی، "infinity" را ارسال کنید\&. مقدار پیش‌فرض آن \fIDefaultTimeoutAbortSec=\fR از فایل پیکربندی مدیر است (به \fBsystemd-system.conf\fR(5) مراجعه کنید)\&. .sp اگر سرویسی از \fIType=notify\fR/\fIType=notify\-reload\fR سیگنال \fBSIGABRT\fR را خودش مدیریت کند (به جای تکیه بر هسته برای نوشتن تخلیه حافظه) می‌تواند "EXTEND_TIMEOUT_USEC=\&..." را برای تمدید زمان لغو فراتر از \fITimeoutAbortSec=\fR ارسال کند\&. اولین دریافت این پیام باید قبل از فراتر رفتن از \fITimeoutAbortSec=\fR رخ دهد، و پس از تمدید زمان لغو فراتر از \fITimeoutAbortSec=\fR، مدیر سرویس به سرویس اجازه می‌دهد تا به لغو ادامه دهد، مشروط بر اینکه سرویس پیام "EXTEND_TIMEOUT_USEC=\&..." را در بازه زمانی مشخص‌شده تکرار کند، یا خود خاتمه یابد (نگاه کنید به \fBsd_notify\fR(3))\&. .sp در نسخه 243 اضافه شد\&. .RE .PP \fITimeoutSec=\fR .RS 4 یک روش کوتاه‌نویسی برای پیکربندی هر دو \fITimeoutStartSec=\fR و \fITimeoutStopSec=\fR روی مقدار مشخص‌شده است\&. .RE .PP \fITimeoutStartFailureMode=\fR, \fITimeoutStopFailureMode=\fR .RS 4 این گزینه‌ها اقدامی را که در صورت عدم اعلام راه‌اندازی توسط یک سرویس دیمن در مدت \fITimeoutStartSec=\fR پیکربندی‌شده آن، یا عدم توقف آن در مدت \fITimeoutStopSec=\fR انجام می‌شود، پیکربندی می‌کنند\&. یکی از مقادیر \fBterminate\fR، \fBabort\fR و \fBkill\fR را می‌پذیرد\&. مقدار پیش‌فرض برای هر دو گزینه \fBterminate\fR است\&. .sp اگر روی \fBterminate\fR تنظیم شود، سرویس با ارسال سیگنال مشخص‌شده در \fIKillSignal=\fR به صورت مسالمت‌آمیز خاتمه می‌یابد (پیش‌فرض \fBSIGTERM\fR است، به \fBsystemd.kill\fR(5) مراجعه کنید)\&. اگر سرویس خاتمه نیابد، \fIFinalKillSignal=\fR پس از \fITimeoutStopSec=\fR ارسال می‌شود\&. اگر \fBabort\fR تنظیم شده باشد، \fIWatchdogSignal=\fR به جای آن ارسال می‌شود و \fITimeoutAbortSec=\fR قبل از ارسال \fIFinalKillSignal=\fR اعمال می‌گردد\&. این تنظیم ممکن است برای تجزیه و تحلیل سرویس‌هایی که به صورت متناوب در راه‌اندازی یا خاموش شدن با شکست مواجه می‌شوند استفاده شود\&. با استفاده از \fBkill\fR، سرویس بلافاصله با ارسال \fIFinalKillSignal=\fR بدون هیچ‌گونه مهلت زمانی دیگری خاتمه می‌یابد\&. این تنظیم می‌تواند برای تسریع در خاموش شدن سرویس‌های ناموفق استفاده شود\&. .sp در نسخه 246 اضافه شد\&. .RE .PP \fIRuntimeMaxSec=\fR .RS 4 حداکثر زمان اجرا را برای سرویس پیکربندی می‌کند\&. اگر از این گزینه استفاده شود و سرویس برای مدتی طولانی‌تر از زمان مشخص‌شده فعال بوده باشد، خاتمه داده شده و در وضعیت خرابی قرار می‌گیرد\&. توجه داشته باشید که این تنظیم بر سرویس‌های \fIType=oneshot\fR هیچ اثری ندارد، زیرا آن‌ها بلافاصله پس از تکمیل فعال‌سازی خاتمه می‌یابند (برای محدود کردن فعال‌سازی آن‌ها از \fITimeoutStartSec=\fR استفاده کنید)\&. برای پیکربندی بدون محدودیت زمان اجرا، "infinity" (پیش‌فرض) را ارسال کنید\&. .sp اگر سرویسی از \fIType=notify\fR/\fIType=notify\-reload\fR پیام "EXTEND_TIMEOUT_USEC=\&..." را ارسال کند، ممکن است باعث شود زمان اجرا فراتر از \fIRuntimeMaxSec=\fR تمدید شود\&. اولین دریافت این پیام باید قبل از فراتر رفتن از \fIRuntimeMaxSec=\fR رخ دهد، و پس از تمدید زمان اجرا فراتر از \fIRuntimeMaxSec=\fR، مدیر سرویس به سرویس اجازه می‌دهد تا به اجرای خود ادامه دهد، مشروط بر اینکه سرویس پیام "EXTEND_TIMEOUT_USEC=\&..." را در بازه زمانی مشخص‌شده تکرار کند تا زمانی که خاموش شدن سرویس با "STOPPING=1" (یا خاتمه) حاصل شود (نگاه کنید به \fBsd_notify\fR(3))\&. .sp در نسخه 229 اضافه شد\&. .RE .PP \fIRuntimeRandomizedExtraSec=\fR .RS 4 این گزینه \fIRuntimeMaxSec=\fR را با افزایش حداکثر زمان اجرا به اندازه یک مدت زمان با توزیع یکنواخت بین 0 و مقدار مشخص‌شده (بر حسب ثانیه) تغییر می‌دهد\&. اگر \fIRuntimeMaxSec=\fR مشخص نشده باشد، این ویژگی غیرفعال خواهد بود\&. .sp در نسخه 250 اضافه شد\&. .RE .PP \fIWatchdogSec=\fR .RS 4 مهلت زمانی دیده‌بان (watchdog timeout) را برای یک سرویس پیکربندی می‌کند\&. دیده‌بان زمانی که راه‌اندازی کامل شد فعال می‌شود\&. سرویس باید \fBsd_notify\fR(3) را به‌طور منظم با "WATCHDOG=1" (یعنی «پینگ زنده‌ماندن») فراخوانی کند\&. اگر زمان بین دو فراخوانی از این دست بیشتر از زمان پیکربندی‌شده باشد، سرویس در وضعیت خرابی قرار می‌گیرد و با \fBSIGABRT\fR (یا سیگنال مشخص‌شده توسط \fIWatchdogSignal=\fR) خاتمه داده می‌شود\&. با تنظیم \fIRestart=\fR روی \fBon\-failure\fR، \fBon\-watchdog\fR، \fBon\-abnormal\fR یا \fBalways\fR، سرویس به‌طور خودکار راه‌اندازی مجدد خواهد شد\&. زمان پیکربندی‌شده در اینجا در متغیر محیطی \fIWATCHDOG_USEC=\fR به فرآیند سرویس در حال اجرا منتقل می‌شود\&. این به دیمن‌ها اجازه می‌دهد در صورتی که پشتیبانی از دیده‌بان برای سرویس فعال باشد، به‌طور خودکار منطق ارسال پینگ زنده ماندن را فعال کنند\&. در صورت استفاده از این گزینه، \fINotifyAccess=\fR (به زیر مراجعه کنید) باید برای باز کردن دسترسی به سوکت اعلان ارائه‌شده توسط systemd تنظیم شود\&. اگر \fINotifyAccess=\fR تنظیم نشده باشد، به‌طور ضمنی روی \fBmain\fR تنظیم می‌شود\&. پیش‌فرض 0 است که این ویژگی را غیرفعال می‌کند\&. سرویس می‌تواند بررسی کند که آیا مدیر سرویس انتظار اعلان‌های زنده ماندن دیده‌بان را دارد یا خیر\&. برای جزئیات به \fBsd_watchdog_enabled\fR(3) مراجعه کنید\&. \fBsd_event_set_watchdog\fR(3) ممکن است برای فعال کردن پشتیبانی خودکار از اعلان دیده‌بان استفاده شود\&. .RE .PP \fIRestart=\fR .RS 4 پیکربندی می‌کند که آیا سرویس در هنگام خروج فرآیند سرویس، کشته شدن آن، یا رسیدن به مهلت زمانی باید مجدداً راه‌اندازی شود یا خیر\&. فرآیند سرویس ممکن است فرآیند اصلی سرویس باشد، اما همچنین می‌تواند یکی از فرآیندهای مشخص‌شده با \fIExecStartPre=\fR، \fIExecStartPost=\fR، \fIExecStop=\fR، \fIExecStopPost=\fR یا \fIExecReload=\fR باشد\&. هنگامی که مرگ فرآیند در نتیجه عملیات systemd باشد (مانند توقف یا راه‌اندازی مجدد سرویس)، سرویس دوباره راه‌اندازی نخواهد شد\&. مهلت‌های زمانی شامل از دست دادن مهلت «پینگ زنده‌ماندن» دیده‌بان و مهلت‌های زمانی شروع، بارگذاری مجدد و توقف سرویس است\&. .sp یکی از مقادیر \fBno\fR، \fBon\-success\fR، \fBon\-failure\fR، \fBon\-abnormal\fR، \fBon\-watchdog\fR، \fBon\-abort\fR یا \fBalways\fR را می‌گیرد\&. اگر روی \fBno\fR (پیش‌فرض) تنظیم شود، سرویس مجدداً راه‌اندازی نخواهد شد\&. اگر روی \fBon\-success\fR تنظیم شود، تنها زمانی که فرآیند سرویس به صورت پاک خارج شود مجدداً راه‌اندازی می‌گردد\&. در این زمینه، یک خروج پاک به معنای هر یک از موارد زیر است: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} کد خروج 0؛ .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} برای انواعی غیر از \fIType=oneshot\fR، یکی از سیگنال‌های \fBSIGHUP\fR، \fBSIGINT\fR، \fBSIGTERM\fR یا \fBSIGPIPE\fR؛ .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} وضعیت‌های خروج و سیگنال‌های مشخص‌شده در \fISuccessExitStatus=\fR\&. .RE .sp اگر روی \fBon\-failure\fR تنظیم شود، سرویس زمانی که فرآیند با کد خروج غیر صفر خارج شود، توسط یک سیگنال خاتمه یابد (از جمله در تخلیه حافظه، اما به استثنای چهار سیگنال فوق‌الذکر)، هنگامی که یک عملیات (مانند بارگذاری مجدد سرویس) به پایان مهلت زمانی برسد، و زمانی که مهلت زمانی دیده‌بان پیکربندی‌شده فعال شود، مجدداً راه‌اندازی خواهد شد\&. اگر روی \fBon\-abnormal\fR تنظیم شود، سرویس هنگامی که فرآیند توسط یک سیگنال خاتمه یابد (از جمله در تخلیه حافظه، به استثنای چهار سیگنال فوق‌الذکر)، هنگامی که مهلت زمانی یک عملیات سپری شود، یا زمانی که مهلت زمانی دیده‌بان فعال گردد مجدداً راه‌اندازی خواهد شد\&. اگر روی \fBon\-abort\fR تنظیم شود، سرویس تنها در صورتی مجدداً راه‌اندازی می‌شود که فرآیند سرویس به دلیل یک سیگنال مدیریت‌نشده که به عنوان وضعیت خروج پاک مشخص نشده است خارج شود\&. اگر روی \fBon\-watchdog\fR تنظیم شود، سرویس تنها در صورتی مجدداً راه‌اندازی می‌شود که مهلت دیده‌بان برای سرویس منقضی شود\&. اگر روی \fBalways\fR تنظیم شود، سرویس بدون توجه به اینکه آیا به صورت پاک خارج شده یا خیر، به صورت غیرعادی با سیگنال خاتمه یافته، یا به مهلت زمانی رسیده است، مجدداً راه‌اندازی خواهد شد\&. توجه داشته باشید که سرویس‌های \fIType=oneshot\fR هرگز با وضعیت خروج پاک مجدداً راه‌اندازی نمی‌شوند، یعنی مقادیر \fBalways\fR و \fBon\-success\fR برای آن‌ها رد می‌شود\&. .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .B جدول\ \&۱.\ \&علل خروج و اثر تنظیمات \fIRestart=\fR .TS allbox tab(:); lB lB lB lB lB lB lB lB. T{ تنظیمات Restart/علل خروج T}:T{ \fBno\fR T}:T{ \fBalways\fR T}:T{ \fBon\-success\fR T}:T{ \fBon\-failure\fR T}:T{ \fBon\-abnormal\fR T}:T{ \fBon\-abort\fR T}:T{ \fBon\-watchdog\fR T} .T& 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 l l l l l l l. T{ کد خروج یا سیگنال پاک T}:T{ \ \& T}:T{ X T}:T{ X T}:T{ \ \& T}:T{ \ \& T}:T{ \ \& T}:T{ \ \& T} T{ کد خروج غیرپاک T}:T{ \ \& T}:T{ X T}:T{ \ \& T}:T{ X T}:T{ \ \& T}:T{ \ \& T}:T{ \ \& T} T{ سیگنال غیرپاک T}:T{ \ \& T}:T{ X T}:T{ \ \& T}:T{ X T}:T{ X T}:T{ X T}:T{ \ \& T} T{ اتمام مهلت زمانی (Timeout) T}:T{ \ \& T}:T{ X T}:T{ \ \& T}:T{ X T}:T{ X T}:T{ \ \& T}:T{ \ \& T} T{ دیده‌بان (Watchdog) T}:T{ \ \& T}:T{ X T}:T{ \ \& T}:T{ X T}:T{ X T}:T{ \ \& T}:T{ X T} .TE .sp 1 به عنوان استثناهایی بر تنظیمات فوق، اگر کد خروج یا سیگنال در \fIRestartPreventExitStatus=\fR (به زیر مراجعه کنید) مشخص شده باشد یا سرویس با \fBsystemctl stop\fR یا عملیاتی معادل متوقف شود، سرویس مجدداً راه‌اندازی نخواهد شد\&. همچنین، اگر کد خروج یا سیگنال در \fIRestartForceExitStatus=\fR (به زیر مراجعه کنید) مشخص شده باشد، سرویس‌ها همیشه مجدداً راه‌اندازی خواهند شد\&. .sp توجه داشته باشید که راه‌اندازی مجدد سرویس مشمول محدودیت نرخ شروع واحد است که با \fIStartLimitIntervalSec=\fR و \fIStartLimitBurst=\fR پیکربندی می‌شود، برای جزئیات به \fBsystemd.unit\fR(5) مراجعه کنید\&. .sp تنظیم این گزینه روی \fBon\-failure\fR انتخاب توصیه‌شده برای سرویس‌های با اجرای طولانی است، تا با تلاش برای بازیابی خودکار از خطاها، قابلیت اطمینان افزایش یابد\&. برای سرویس‌هایی که باید بتوانند به انتخاب خود خاتمه یابند (و از راه‌اندازی مجدد فوری جلوگیری کنند)، \fBon\-abnormal\fR یک انتخاب جایگزین است\&. .RE .PP \fIRestartMode=\fR .RS 4 یک مقدار رشته‌ای می‌گیرد که مشخص می‌کند یک سرویس چگونه باید مجدداً راه‌اندازی شود: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر روی \fBnormal\fR (پیش‌فرض) تنظیم شود، سرویس با عبور از وضعیت ناموفق/غیرفعال (failed/inactive) مجدداً راه‌اندازی می‌شود\&. .sp در نسخه 254 اضافه شد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر روی \fBdirect\fR تنظیم شود، سرویس در حین راه‌اندازی مجدد خودکار مستقیماً به وضعیت در حال فعال‌سازی (activating) تغییر می‌کند و از وضعیت‌های ناموفق/غیرفعال صرف‌نظر می‌نماید\&. \fIExecStopPost=\fR همچنان فراخوانی می‌شود\&. \fIOnSuccess=\fR و \fIOnFailure=\fR نادیده گرفته می‌شوند\&. .sp این گزینه در مواردی مفید است که یک وابستگی ممکن است موقتاً با شکست مواجه شود اما ما نمی‌خواهیم این شکست‌های موقت باعث ناموفق شدن واحدهای وابسته شوند\&. واحدهای وابسته از این شکست‌های موقت مطلع نمی‌شوند\&. .sp در نسخه 254 اضافه شد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر روی \fBdebug\fR تنظیم شود، مدیر سرویس پیام‌های مربوط به این واحد را در سطح اشکال‌زدایی (debug level) در حین تلاش برای راه‌اندازی‌های مجدد خودکار ثبت می‌کند، تا زمانی که سرویس به محدودیت نرخ برسد یا موفق شود، و متغیر محیطی \fI$DEBUG_INVOCATION=1\fR برای واحد تنظیم خواهد شد\&. این قابلیت برای به دست آوردن اطلاعات اضافی در هنگام شکست سرویس در راه‌اندازی مفید است، بدون اینکه نیازی به فعال کردن پیش‌دستانه یا دائمی گزارش‌گیری سطح اشکال‌زدایی در systemd باشد که بسیار پرحجم است\&. این حالت در غیر این صورت معادل حالت \fBnormal\fR است\&. .sp در نسخه 257 اضافه شد\&. .RE .sp در نسخه 254 اضافه شد\&. .RE .PP \fISuccessExitStatus=\fR .RS 4 فهرستی از تعاریف وضعیت خروج را می‌گیرد که در صورت بازگردانده شدن توسط فرآیند اصلی سرویس، علاوه بر وضعیت خروج موفق معمول 0 و (به جز برای \fIType=oneshot\fR) سیگنال‌های \fBSIGHUP\fR، \fBSIGINT\fR، \fBSIGTERM\fR و \fBSIGPIPE\fR، به عنوان خاتمه موفقیت‌آمیز در نظر گرفته می‌شوند\&. تعاریف وضعیت خروج می‌توانند وضعیت‌های عددی خاتمه، نام‌های وضعیت خاتمه یا نام‌های سیگنال خاتمه باشند که با فاصله از هم جدا شده‌اند\&. برای فهرستی از نام‌های وضعیت خاتمه، بخش کدهای خروج فرآیند را در \fBsystemd.exec\fR(5) ببینید (برای این تنظیم فقط بخشی بدون پیشوند "EXIT_" یا "EX_" باید استفاده شود)\&. برای فهرستی از نام‌های سیگنال به \fBsignal\fR(7) مراجعه کنید\&. .sp توجه داشته باشید که این تنظیم نگاشت بین وضعیت‌های خروج عددی و نام آن‌ها را تغییر نمی‌دهد؛ یعنی صرف‌نظر از نحوه استفاده از این تنظیم، 0 همچنان به "SUCCESS" نگاشته می‌شود (و بنابراین معمولاً در خروجی ابزارها به صورت "0/SUCCESS" نشان داده می‌شود) و 1 به "FAILURE" (و بنابراین معمولاً به صورت "1/FAILURE" نشان داده می‌شود)، و به همین ترتیب\&. این گزینه فقط اثر این وضعیت‌های خروج و نحوه انتشار آن‌ها به وضعیت کلی سرویس را کنترل می‌کند\&. .sp این گزینه ممکن است بیش از یک بار ظاهر شود، که در این صورت فهرست وضعیت‌های خروج موفق ادغام می‌شود\&. اگر رشته خالی به این گزینه اختصاص داده شود، فهرست بازنشانی می‌شود و تمام انتساب‌های قبلی این گزینه بی‌اثر خواهند بود\&. .PP \fBمثال\ \&۱.\ \&یک سرویس با تنظیم \fISuccessExitStatus=\fR\fR .sp .if n \{\ .RS 4 .\} .nf SuccessExitStatus=TEMPFAIL 250 SIGKILL .fi .if n \{\ .RE .\} .sp وضعیت خروج 75 (\fBTEMPFAIL\fR)، 250، و سیگنال خاتمه \fBSIGKILL\fR به عنوان خاتمه پاک سرویس تلقی می‌شوند\&. نکته: \fBsystemd\-analyze exit\-status\fR ممکن است برای فهرست کردن وضعیت‌های خروج و ترجمه بین مقادیر عددی وضعیت و نام‌ها استفاده شود\&. .sp در نسخه 189 اضافه شد\&. .RE .PP \fIRestartPreventExitStatus=\fR .RS 4 فهرستی از تعاریف وضعیت خروج را می‌گیرد که در صورت بازگردانده شدن توسط فرآیند اصلی سرویس، بدون توجه به تنظیم راه‌اندازی مجدد پیکربندی‌شده با \fIRestart=\fR، از راه‌اندازی مجدد خودکار سرویس جلوگیری می‌کند\&. تعاریف وضعیت خروج می‌توانند وضعیت‌های عددی خاتمه، نام‌های وضعیت خاتمه یا نام‌های سیگنال خاتمه باشند که با فاصله از هم جدا شده‌اند\&. پیش‌فرض فهرست خالی است، به طوری که به‌طور پیش‌فرض هیچ وضعیت خروجی از منطق راه‌اندازی مجدد پیکربندی‌شده مستثنی نمی‌شود\&. .PP \fBمثال\ \&۲.\ \&یک سرویس با تنظیم \fIRestartPreventExitStatus=\fR\fR .sp .if n \{\ .RS 4 .\} .nf RestartPreventExitStatus=TEMPFAIL 250 SIGKILL .fi .if n \{\ .RE .\} .sp وضعیت خروج 75 (\fBTEMPFAIL\fR)، 250، و سیگنال خاتمه \fBSIGKILL\fR منجر به راه‌اندازی مجدد خودکار سرویس نخواهند شد\&. .sp این گزینه ممکن است بیش از یک بار ظاهر شود، که در این صورت فهرست وضعیت‌های مانع راه‌اندازی مجدد ادغام می‌شود\&. اگر رشته خالی به این گزینه اختصاص داده شود، فهرست بازنشانی می‌شود و تمام انتساب‌های قبلی این گزینه بی‌اثر خواهند بود\&. .sp توجه داشته باشید که این تنظیم بر فرآیندهای پیکربندی‌شده از طریق \fIExecStartPre=\fR، \fIExecStartPost=\fR، \fIExecStop=\fR، \fIExecStopPost=\fR یا \fIExecReload=\fR هیچ اثری ندارد، بلکه تنها بر فرآیند اصلی سرویس اثر می‌گذارد، یعنی فرآیندی که توسط \fIExecStart=\fR فراخوانی شده است یا (بسته به \fIType=\fR، \fIPIDFile=\fR و غیره) فرآیند اصلی پیکربندی‌شده به نحوی دیگر\&. .sp در نسخه 189 اضافه شد\&. .RE .PP \fIRestartForceExitStatus=\fR .RS 4 فهرستی از تعاریف وضعیت خروج را می‌گیرد که در صورت بازگردانده شدن توسط فرآیند اصلی سرویس، بدون توجه به تنظیم راه‌اندازی مجدد پیکربندی‌شده با \fIRestart=\fR، راه‌اندازی مجدد خودکار سرویس را اجبار می‌کند\&. قالب آرگومان مشابه با \fIRestartPreventExitStatus=\fR است\&. .sp توجه داشته باشید که برای سرویس‌های \fIType=oneshot\fR، یک وضعیت خروج موفقیت‌آمیز مانع از راه‌اندازی مجدد خودکار آن‌ها می‌شود، صرف‌نظر از اینکه وضعیت‌های خروج مربوطه در این گزینه فهرست شده باشند یا خیر\&. .sp در نسخه 215 اضافه شد\&. .RE .PP \fIRootDirectoryStartOnly=\fR .RS 4 یک آرگومان بولی می‌گیرد\&. اگر درست (true) باشد، دایرکتوری ریشه که با گزینه \fIRootDirectory=\fR پیکربندی شده است (برای اطلاعات بیشتر به \fBsystemd.exec\fR(5) مراجعه کنید)، فقط برای فرآیند شروع‌شده با \fIExecStart=\fR اعمال می‌شود، و نه برای دستورات مختلف دیگر \fIExecStartPre=\fR، \fIExecStartPost=\fR، \fIExecReload=\fR، \fIExecStop=\fR و \fIExecStopPost=\fR\&. اگر نادرست (false) باشد، این تنظیم برای همه دستورات پیکربندی‌شده به یک شکل اعمال می‌شود\&. پیش‌فرض نادرست است\&. .RE .PP \fINonBlocking=\fR .RS 4 پرچم \fBO_NONBLOCK\fR را برای تمام توصیف‌کننده‌های فایل ارسال‌شده از طریق فعال‌سازی مبتنی بر سوکت تنظیم می‌کند\&. اگر درست (true) باشد، تمام توصیف‌کننده‌های فایل >= 3 (یعنی همه به جز stdin، stdout و stderr)، به استثنای مواردی که از طریق منطق ذخیره‌سازی توصیف‌کننده فایل منتقل شده‌اند (برای جزئیات به \fIFileDescriptorStoreMax=\fR مراجعه کنید)، پرچم \fBO_NONBLOCK\fR را خواهند داشت و بنابراین در حالت غیرمسدودکننده (non-blocking) قرار می‌گیرند\&. این گزینه فقط در ارتباط با یک واحد سوکت کاربرد دارد، همان‌طور که در \fBsystemd.socket\fR(5) شرح داده شده است و برای مثال بر توصیف‌کننده‌های فایلی که قبلاً در مخزن توصیف‌کننده فایل ذخیره شده‌اند اثری ندارد\&. پیش‌فرض نادرست (false) است\&. .sp توجه داشته باشید که اگر یک واحد سوکت یکسان برای انتقال به چندین واحد سرویس پیکربندی شده باشد (از طریق تنظیم \fISockets=\fR، به زیر مراجعه کنید)، و این سرویس‌ها دارای پیکربندی‌های متفاوتی از \fINonBlocking=\fR باشند، وضعیت دقیق \fBO_NONBLOCK\fR به ترتیبی که این سرویس‌ها فراخوانی می‌شوند بستگی دارد، و احتمالاً پس از اینکه کد سرویس توصیف‌کننده فایل سوکت را در اختیار گرفت تغییر خواهد کرد، صرفاً به این دلیل که وضعیت \fBO_NONBLOCK\fR یک سوکت بین تمام توصیف‌کننده‌های فایلی که به آن ارجاع دارند مشترک است\&. از این رو ضروری است که تمام سرویس‌هایی که یک سوکت مشترک دارند از یک پیکربندی یکسان برای \fINonBlocking=\fR استفاده کنند، و پرچم را در کد سرویس نیز تغییر ندهند\&. .RE .PP \fINotifyAccess=\fR .RS 4 دسترسی به سوکت اعلان وضعیت سرویس را، همان‌گونه که از طریق فراخوانی \fBsd_notify\fR(3) قابل دسترسی است، کنترل می‌کند\&. یکی از مقادیر \fBnone\fR (پیش‌فرض)، \fBmain\fR، \fBexec\fR یا \fBall\fR را می‌پذیرد\&. اگر \fBnone\fR باشد، هیچ به‌روزرسانی وضعیت دیمن از فرآیندهای سرویس پذیرفته نمی‌شود و تمام پیام‌های به‌روزرسانی وضعیت نادیده گرفته می‌شوند\&. اگر \fBmain\fR باشد، تنها به‌روزرسانی‌های سرویس که از فرآیند اصلی سرویس ارسال شده‌اند پذیرفته می‌شوند\&. اگر \fBexec\fR باشد، تنها به‌روزرسانی‌های سرویس ارسالی از هر یک از فرآیندهای اصلی یا کنترلی که از یکی از دستورات \fIExec*=\fR منشأ گرفته‌اند پذیرفته می‌شوند\&. اگر \fBall\fR باشد، تمام به‌روزرسانی‌های سرویس از تمام اعضای گروه کنترلی (control group) سرویس پذیرفته می‌شوند\&. این گزینه باید برای باز کردن دسترسی به سوکت اعلان هنگام استفاده از \fIType=notify\fR/\fIType=notify\-reload\fR یا \fIWatchdogSec=\fR تنظیم شود (به بالا مراجعه کنید)\&. اگر از این گزینه‌ها استفاده شود اما \fINotifyAccess=\fR پیکربندی نشده باشد، به‌طور ضمنی روی \fBmain\fR تنظیم خواهد شد\&. .sp توجه داشته باشید که اعلان‌های \fBsd_notify()\fR ممکن است تنها در صورتی به‌طور صحیح به واحدها نسبت داده شوند که یا فرآیند ارسال‌کننده هنوز در زمان پردازش پیام توسط PID 1 وجود داشته باشد، یا فرآیند ارسال‌کننده به‌طور صریح توسط مدیر سرویس در زمان اجرا ردیابی شود\&. مورد دوم زمانی صادق است که مدیر سرویس در ابتدا فرآیند را انشعاب داده باشد، یعنی در تمام فرآیندهایی که با \fBmain\fR یا \fBexec\fR مطابقت دارند\&. برعکس، اگر یک فرآیند کمکی از واحد یک پیام \fBsd_notify()\fR ارسال کند و بلافاصله خارج شود، ممکن است مدیر سرویس نتواند به درستی پیام را به واحد نسبت دهد، و بنابراین آن را نادیده خواهد گرفت، حتی اگر \fINotifyAccess=\fR\fBall\fR برای آن تنظیم شده باشد\&. .sp بنابراین، برای از بین بردن تمام شرایط رقابتی (race conditions) مربوط به جستجوی واحد کلاینت و انتساب صحیح اعلان‌ها به واحدها، می‌توان از \fBsd_notify_barrier()\fR استفاده کرد\&. این فراخوانی به عنوان یک نقطه همگام‌سازی عمل می‌کند و تضمین می‌کند که تمام اعلان‌های ارسال‌شده قبل از این فراخوانی، هنگام بازگشت موفقیت‌آمیز آن توسط مدیر سرویس دریافت شده‌اند\&. استفاده از \fBsd_notify_barrier()\fR برای کلاینت‌هایی که توسط مدیر سرویس فراخوانی نمی‌شوند مورد نیاز است، در غیر این صورت این سازوکار همگام‌سازی برای انتساب اعلان‌ها به واحد غیرضروری است\&. .RE .PP \fISockets=\fR .RS 4 نام واحدهای سوکتی را مشخص می‌کند که این سرویس هنگام شروع باید توصیف‌کننده‌های فایل سوکت را از آن‌ها به ارث ببرد\&. معمولاً نباید نیازی به استفاده از این تنظیم باشد، زیرا تمام توصیف‌کننده‌های فایل سوکتی که واحد آن‌ها نامی یکسان با سرویس دارد (البته با در نظر گرفتن پسوند نام واحد متفاوت) به فرآیند ایجادشده منتقل می‌شوند\&. .sp توجه داشته باشید که ممکن است توصیف‌کننده‌های فایل سوکت یکسان به چندین فرآیند به‌طور هم‌زمان منتقل شوند\&. همچنین توجه داشته باشید که ممکن است بر روی ترافیک سوکت ورودی سرویسی متفاوت از سرویسی که در نهایت برای به ارث بردن توصیف‌کننده‌های فایل سوکت پیکربندی شده است، فعال شود\&. یا به عبارت دیگر: تنظیم \fIService=\fR در واحدهای \&.socket لازم نیست با معکوس تنظیم \fISockets=\fR در واحد \&.service مربوطه مطابقت داشته باشد\&. .sp این گزینه ممکن است بیش از یک بار ظاهر شود، که در این صورت فهرست واحدهای سوکت ادغام می‌شود\&. توجه داشته باشید که پس از تنظیم، پاک کردن مجدد فهرست سوکت‌ها (برای مثال، با اختصاص رشته خالی به این گزینه) پشتیبانی نمی‌شود\&. .RE .PP \fIFileDescriptorStoreMax=\fR .RS 4 پیکربندی می‌کند که چه تعداد توصیف‌کننده فایل را می‌توان در مدیر سرویس برای سرویس با استفاده از پیام‌های "FDSTORE=1" در \fBsd_pid_notify_with_fds\fR(3) ذخیره کرد\&. این قابلیت برای پیاده‌سازی سرویس‌هایی مفید است که می‌توانند پس از یک درخواست صریح یا یک خرابی (crash) بدون از دست دادن وضعیت مجدداً راه‌اندازی شوند\&. هرگونه سوکت باز و سایر توصیف‌کننده‌های فایل که نباید در طول راه‌اندازی مجدد بسته شوند را می‌توان به این روش ذخیره کرد\&. وضعیت برنامه می‌تواند یا در فایلی در \fIRuntimeDirectory=\fR سریال‌سازی شود، یا در یک توصیف‌کننده فایل حافظه \fBmemfd_create\fR(2) ذخیره گردد\&. پیش‌فرض 0 است، یعنی هیچ توصیف‌کننده فایلی ممکن نیست در مدیر سرویس ذخیره شود\&. تمام توصیف‌کننده‌های فایل ارسال‌شده به مدیر سرویس از یک سرویس خاص، در راه‌اندازی مجدد بعدی سرویس به فرآیند اصلی سرویس برگردانده می‌شوند (برای جزئیات در مورد پروتکل دقیق استفاده‌شده و ترتیبی که توصیف‌کننده‌های فایل منتقل می‌شوند به \fBsd_listen_fds\fR(3) مراجعه کنید)\&. هرگونه توصیف‌کننده فایل ارسال‌شده به مدیر سرویس زمانی که \fBPOLLHUP\fR یا \fBPOLLERR\fR روی آن‌ها دیده شود، یا زمانی که سرویس به‌طور کامل متوقف شود و هیچ کاری در صف یا در حال اجرا برای آن نباشد، به‌طور خودکار بسته می‌شوند (مورد اخیر را می‌توان با \fIFileDescriptorStorePreserve=\fR تغییر داد، به زیر مراجعه کنید)\&. اگر از این گزینه استفاده شود، \fINotifyAccess=\fR (به بالا مراجعه کنید) باید برای باز کردن دسترسی به سوکت اعلان ارائه‌شده توسط systemd تنظیم شود\&. اگر \fINotifyAccess=\fR تنظیم نشده باشد، به‌طور ضمنی روی \fBmain\fR تنظیم خواهد شد\&. .sp دستور \fBfdstore\fR از \fBsystemd-analyze\fR(1) ممکن است برای فهرست کردن محتوای فعلی مخزن توصیف‌کننده فایل یک سرویس استفاده شود\&. .sp توجه داشته باشید که مدیر سرویس توصیف‌کننده‌های فایل موجود در مخزن توصیف‌کننده فایل را تنها به فرآیندهای خود سرویس منتقل می‌کند، و هرگز از طریق IPC یا موارد مشابه به سایر کلاینت‌ها منتقل نخواهد کرد\&. با این حال، به کلاینت‌های غیرممتاز اجازه می‌دهد تا فهرست توصیف‌کننده‌های فایلِ در حال حاضر بازِ یک سرویس را جویا شوند\&. بنابراین داده‌های حساس را می‌توان با خیال راحت در داخل فایل‌های ارجاع‌شده قرار داد، اما نباید به متاداده‌های (مثلاً در نام فایل‌ها) توصیف‌کننده‌های فایل ذخیره‌شده پیوست شوند\&. .sp اگر این گزینه روی مقداری غیر صفر تنظیم شود، متغیر محیطی \fI$FDSTORE\fR برای فرآیندهای فراخوانی‌شده برای این سرویس تنظیم خواهد شد\&. برای جزئیات به \fBsystemd.exec\fR(5) مراجعه کنید\&. .sp برای اطلاعات بیشتر در مورد مخزن توصیف‌کننده فایل، بررسی اجمالی \m[blue]\fBFile Descriptor Store\fR\m[]\&\s-2\u[1]\d\s+2 را ببینید\&. .sp در نسخه 219 اضافه شد\&. .RE .PP \fIFileDescriptorStorePreserve=\fR .RS 4 یکی از مقادیر \fBno\fR، \fByes\fR، \fBrestart\fR را می‌پذیرد و زمان آزادسازی مخزن توصیف‌کننده فایل سرویس (یعنی زمان بستن توصیف‌کننده‌های فایل موجود در آن، در صورت وجود) را کنترل می‌کند\&. اگر روی \fBno\fR تنظیم شود، مخزن توصیف‌کننده فایل با متوقف شدن سرویس به‌طور خودکار آزاد می‌شود؛ اگر روی \fBrestart\fR (پیش‌فرض) باشد، تا زمانی که واحد نه غیرفعال باشد و نه ناموفق، یا کاری برای سرویس در صف باشد، یا انتظار برود سرویس مجدداً راه‌اندازی شود، نگه داشته می‌شود\&. اگر \fByes\fR باشد، مخزن توصیف‌کننده فایل تا زمانی که واحد از حافظه حذف شود (یعنی دیگر به آن ارجاع داده نشود و غیرفعال باشد) نگه داشته می‌شود\&. مورد اخیر برای نگه داشتن ورودی‌ها در مخزن توصیف‌کننده فایل تا زمان خروج مدیر سرویس مفید است\&. .sp از \fBsystemctl clean \-\-what=fdstore \&...\fR برای آزادسازی صریح مخزن توصیف‌کننده فایل استفاده کنید\&. .sp در نسخه 254 اضافه شد\&. .RE .PP \fIUSBFunctionDescriptors=\fR .RS 4 مکان فایلی حاوی توصیف‌کننده‌های \m[blue]\fBUSB FunctionFS\fR\m[]\&\s-2\u[2]\d\s+2 را برای پیاده‌سازی عملکردهای گجت USB پیکربندی می‌کند\&. این گزینه تنها در ارتباط با یک واحد سوکت که \fIListenUSBFunction=\fR در آن پیکربندی شده است استفاده می‌شود\&. محتویات این فایل پس از باز شدن در فایل ep0 نوشته می‌شود\&. .sp در نسخه 227 اضافه شد\&. .RE .PP \fIUSBFunctionStrings=\fR .RS 4 مکان فایلی حاوی رشته‌های USB FunctionFS را پیکربندی می‌کند\&. رفتار مشابه \fIUSBFunctionDescriptors=\fR در بالا است\&. .sp در نسخه 227 اضافه شد\&. .RE .PP \fIOOMPolicy=\fR .RS 4 سیاست کشتن فرآیند در هنگام کمبود حافظه (OOM) را برای هسته و کشنده OOM فضای کاربری \fBsystemd-oomd.service\fR(8) پیکربندی می‌کند\&. در لینوکس، هنگامی که حافظه به نقطه‌ای کمیاب می‌شود که هسته در تخصیص حافظه برای خود دچار مشکل می‌شود، ممکن است تصمیم بگیرد یک فرآیند در حال اجرا را بکشد تا حافظه آزاد شده و فشار حافظه کاهش یابد\&. توجه داشته باشید که systemd\-oomd\&.service راه‌حل انعطاف‌پذیرتری است که هدف آن جلوگیری از شرایط کمبود حافظه برای فضای کاربری نیز هست، نه فقط هسته، با تلاش برای خاتمه دادن به سرویس‌ها در زمان زودتر، قبل از اینکه هسته مجبور به اقدام شود\&. .sp این تنظیم یکی از مقادیر \fBcontinue\fR، \fBstop\fR یا \fBkill\fR را می‌گیرد\&. اگر روی \fBcontinue\fR تنظیم شود و فرآیندی در واحد توسط قاتل OOM کشته شود، این رویداد ثبت وقایع می‌شود اما واحد به اجرای خود ادامه می‌دهد\&. اگر روی \fBstop\fR تنظیم شود، رویداد ثبت وقایع شده اما واحد توسط مدیر سرویس به صورت پاک خاتمه می‌یابد\&. اگر روی \fBkill\fR تنظیم شود و یکی از فرآیندهای واحد توسط قاتل OOM کشته شود، به هسته دستور داده می‌شود که تمام فرآیندهای باقی‌مانده واحد را نیز با تنظیم ویژگی memory\&.oom\&.group روی \fB1\fR بکشد؛ همچنین صفحه مستندات هسته \m[blue]\fBControl Group v2\fR\m[]\&\s-2\u[3]\d\s+2 را ببینید\&. .sp پیش‌فرض روی تنظیمی است که \fIDefaultOOMPolicy=\fR در \fBsystemd-system.conf\fR(5) روی آن قرار دارد، به جز برای واحدهایی که \fIDelegate=\fR در آن‌ها فعال است، که در آنجا پیش‌فرض \fBcontinue\fR است\&. .sp از تنظیم \fIOOMScoreAdjust=\fR برای پیکربندی اینکه آیا فرآیندهای واحد باید نامزدهای ارجح یا کم‌ارجح‌تر برای خاتمه فرآیند توسط منطق قاتل OOM لینوکس تلقی شوند، استفاده کنید\&. برای جزئیات به \fBsystemd.exec\fR(5) مراجعه نمایید\&. .sp این تنظیم همچنین بر \fBsystemd-oomd.service\fR(8) اعمال می‌شود\&. مشابه کشتن‌های OOM انجام‌شده توسط هسته، این تنظیم وضعیت واحد را پس از اینکه \fBsystemd\-oomd\fR یک cgroup مرتبط با آن را می‌کشد تعیین می‌کند\&. .sp در نسخه 243 اضافه شد\&. .RE .PP \fIOpenFile=\fR .RS 4 آرگومانی به شکل "path[\fI:fd\-name:options\fR]" می‌گیرد، که در آن: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} "path" مسیری به یک فایل یا یک سوکت \fBAF_UNIX\fR در سیستم فایل است؛ .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} "fd\-name" نامی است که به توصیف‌کننده فایل اختصاص داده می‌شود؛ نام ممکن است شامل هر نویسه اسکی (ASCII) باشد، اما باید فاقد نویسه‌های کنترلی و ":" باشد، و حداکثر ۲۵۵ نویسه طول داشته باشد؛ این مقدار اختیاری است و در صورت عدم ارائه، پیش‌فرض آن نام فایل خواهد بود؛ .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} "options" فهرستی از گزینه‌های دسترسی جداشده با کاما است؛ مقادیر ممکن عبارتند از "read\-only"، "append"، "truncate"، "graceful"؛ در صورت عدم تعیین، فایل‌ها در حالت \fBrw\fR باز می‌شوند؛ اگر "graceful" مشخص شده باشد، از خطاهای هنگام باز کردن فایل/سوکت صرف‌نظر می‌شود\&. مشخص کردن یک گزینه یکسان چندین بار به عنوان خطا تلقی می‌شود\&. .RE .sp فایل یا سوکت توسط مدیر سرویس باز می‌شود و توصیف‌کننده فایل به سرویس منتقل می‌گردد\&. اگر مسیر یک سوکت باشد، \fBconnect()\fR را روی آن فراخوانی می‌کنیم\&. برای جزئیات بیشتر در مورد نحوه بازیابی این توصیف‌کننده‌های فایل به \fBsd_listen_fds\fR(3) مراجعه کنید\&. .sp این تنظیم برای این مفید است که به سرویس‌ها اجازه دهد به فایل‌ها/سوکت‌هایی دسترسی داشته باشند که خودشان نمی‌توانند به آن‌ها دسترسی پیدا کنند (به دلیل اجرا در یک فضای‌نام سوارکردن مجزا، نداشتن امتیازات و غیره)\&. .sp این تنظیم را می‌توان چندین بار مشخص کرد، که در این صورت تمام مسیرهای مشخص‌شده باز می‌شوند و توصیف‌کننده‌های فایل به سرویس منتقل می‌گردند\&. اگر رشته خالی به آن اختصاص داده شود، کل فهرست فایل‌های باز که قبل از این تعریف شده‌اند بازنشانی می‌شود\&. .sp در نسخه 253 اضافه شد\&. .RE .PP \fIReloadSignal=\fR .RS 4 سیگنال فرآیند یونیکس را برای ارسال به فرآیند اصلی سرویس در زمان درخواست برای بارگذاری مجدد پیکربندی سرویس پیکربندی می‌کند\&. مقدار پیش‌فرض \fBSIGHUP\fR است\&. این گزینه هیچ اثری ندارد مگر اینکه از \fIType=\fR\fBnotify\-reload\fR استفاده شود، به بالا مراجعه کنید\&. .sp در نسخه 253 اضافه شد\&. .RE .PP برای تنظیمات بیشتر \fBsystemd.unit\fR(5)، \fBsystemd.exec\fR(5) و \fBsystemd.kill\fR(5) را بررسی کنید\&. .SH "خطوط فرمان (COMMAND LINES)" .PP این بخش به توصیف تجزیه خط فرمان و جایگزینی متغیرها و مشخص‌کننده‌ها برای گزینه‌های \fIExecStart=\fR، \fIExecStartPre=\fR، \fIExecStartPost=\fR، \fIExecReload=\fR، \fIExecStop=\fR، \fIExecStopPost=\fR و \fIExecCondition=\fR می‌پردازد\&. .PP چندین خط فرمان را می‌توان با استفاده مکرر از تنظیم مربوطه مشخص کرد\&. .PP هر خط فرمان با استفاده از قوانین توصیف‌شده در بخش "Quoting" در \fBsystemd.syntax\fR(7) از نقل‌قول خارج می‌شود\&. اولین مورد تبدیل به دستور برای اجرا می‌شود، و موارد بعدی آرگومان‌های آن خواهند بود\&. .PP این نحو از نحو شل الهام گرفته شده است، اما فقط نویسه‌های متا و بسط‌های توصیف‌شده در بندهای زیر فهمیده می‌شوند، و بسط متغیرها متفاوت است\&. به ویژه، تغییر مسیر با استفاده از "<"، "<<"، ">" و ">>"، لوله‌ها (pipes) با استفاده از "|"، اجرای برنامه‌ها در پس‌زمینه با استفاده از "&" و \fIسایر عناصر نحو شل پشتیبانی نمی‌شوند\fR\&. .PP دستور برای اجرا ممکن است شامل فاصله باشد، اما نویسه‌های کنترلی مجاز نیستند\&. .PP هر دستور ممکن است با تعدادی نویسه ویژه پیشوندگذاری شود: .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .B جدول\ \&۲.\ \&پیشوندهای ویژه فایل اجرایی .TS allbox tab(:); lB lB. T{ پیشوند T}:T{ اثر T} .T& l l l l l l l l l l l l. T{ "@" T}:T{ اگر مسیر اجرایی با "@" پیشوندگذاری شود، دومین توکن مشخص‌شده به عنوان \fBargv[0]\fR به فرآیند اجراشده منتقل می‌شود (به جای نام فایل واقعی)، و پس از آن سایر آرگومان‌های مشخص‌شده قرار می‌گیرند\&. T} T{ "\-" T}:T{ اگر مسیر اجرایی با "\-" پیشوندگذاری شود، کد خروج دستوری که معمولاً ناموفق تلقی می‌شود (یعنی وضعیت خروج غیر صفر یا خروج غیرعادی به دلیل سیگنال) ثبت می‌شود، اما اثر دیگری نخواهد داشت و معادل موفقیت تلقی می‌گردد\&. T} T{ ":" T}:T{ اگر مسیر اجرایی با ":" پیشوندگذاری شود، جایگزینی متغیر محیطی (همان‌طور که در زیر این جدول شرح داده شده است) اعمال نخواهد شد\&. T} T{ "+" T}:T{ اگر مسیر اجرایی با "+" پیشوندگذاری شود، فرآیند با تمام امتیازات اجرا می‌شود\&. در این حالت، محدودیت‌های امتیازی پیکربندی‌شده با \fIUser=\fR، \fIGroup=\fR، \fICapabilityBoundingSet=\fR یا گزینه‌های مختلف فضای‌نام سیستم فایل (مانند \fIPrivateDevices=\fR، \fIPrivateTmp=\fR) برای خط فرمان فراخوانی‌شده اعمال نمی‌شوند (اما همچنان بر هر خط دیگر \fIExecStart=\fR، \fIExecStop=\fR و غیره اثر می‌گذارند)\&. با این حال، توجه داشته باشید که این کار گزینه‌هایی را که برای کل گروه کنترلی اعمال می‌شوند دور نمی‌زند، مانند \fIDevicePolicy=\fR؛ برای فهرست کامل به \fBsystemd.resource-control\fR(5) مراجعه کنید\&. T} T{ "!" T}:T{ مشابه با نویسه "+" که در بالا بحث شد، این پیشوند اجازه فراخوانی خطوط فرمان با امتیازات ارتقایافته را می‌دهد\&. با این حال، برخلاف "+"، نویسه "!" منحصراً اثر \fIUser=\fR، \fIGroup=\fR و \fISupplementaryGroups=\fR را تغییر می‌دهد، یعنی فقط بخش‌هایی که بر گواهی‌های کاربر و گروه اثر می‌گذارند\&. توجه داشته باشید که این تنظیم ممکن است با \fIDynamicUser=\fR ترکیب شود، که در این صورت یک جفت کاربر/گروه پویا قبل از فراخوانی دستور تخصیص می‌یابد، اما تغییر گواهی‌ها به خود فرآیند اجراشده واگذار می‌شود\&. T} T{ "!!" T}:T{ این پیشوند بسیار شبیه به "!" است، اما تنها در سیستم‌هایی اثر دارد که فاقد پشتیبانی از قابلیت‌های پیرامونی فرآیند (ambient process capabilities) هستند، یعنی بدون پشتیبانی از \fIAmbientCapabilities=\fR\&. این پیشوند برای فایل‌های واحدی در نظر گرفته شده است که از قابلیت‌های پیرامونی بهره می‌برند تا فرآیندها را با حداقل امتیازات در هر کجا که امکان‌پذیر است اجرا کنند و در عین حال با سیستم‌هایی که فاقد پشتیبانی از قابلیت‌های پیرامونی هستند سازگار بمانند\&. توجه داشته باشید که وقتی از "!!" استفاده می‌شود و سیستمی فاقد پشتیبانی از قابلیت پیرامونی شناسایی می‌گردد، هر بخش پیکربندی‌شده \fISystemCallFilter=\fR و \fICapabilityBoundingSet=\fR به‌طور ضمنی تغییر می‌کند تا به فرآیندهای ایجادشده اجازه دهد خودشان گواهی‌ها و قابلیت‌ها را رها کنند، حتی اگر این کار به گونه‌ای پیکربندی شده باشد که مجاز نباشد\&. علاوه بر این، اگر از این پیشوند استفاده شود و سیستمی فاقد پشتیبانی از قابلیت پیرامونی شناسایی گردد، از \fIAmbientCapabilities=\fR صرف‌نظر شده و اعمال نخواهد شد\&. در سیستم‌هایی که از قابلیت‌های پیرامونی پشتیبانی می‌کنند، "!!" هیچ اثری ندارد و زائد است\&. T} .TE .sp 1 .PP "@"، "\-"، ":"، و یکی از "+"/"!"/"!!" می‌توانند با هم استفاده شوند و می‌توانند به هر ترتیبی ظاهر شوند\&. با این حال، در هر زمان تنها می‌توان از یکی از "+"، "!"، "!!" استفاده کرد\&. .PP برای هر دستور، اولین آرگومان باید یک مسیر مطلق به یک فایل اجرایی یا یک نام فایل ساده بدون هیچ‌گونه اسلش باشد\&. اگر دستور یک مسیر کامل (مطلق) نباشد، با استفاده از یک مسیر جستجوی ثابت که در زمان کامپایل تعیین شده است به یک مسیر کامل حل می‌شود\&. دایرکتوری‌های جستجو شده شامل /usr/local/bin/، /usr/bin/ و همتایان sbin/ آن‌ها هستند (فقط در سیستم‌هایی که از bin/ و sbin/ تفکیک‌شده استفاده می‌کنند)\&. بنابراین در مورد فایل‌های اجرایی واقع در هر یک از دایرکتوری‌های "استاندارد"، استفاده از تنها نام فایل اجرایی ایمن است، و در موارد دیگر باید از یک مسیر مطلق استفاده شود\&. راهنمایی: این مسیر جستجو را می‌توان با استفاده از \fBsystemd\-path search\-binaries\-default\fR استعلام کرد\&. .PP خط فرمان مشخص‌کننده‌های "%" را همان‌گونه که در \fBsystemd.unit\fR(5) شرح داده شده است می‌پذیرد\&. .PP آرگومانی که صرفاً شامل ";" باشد باید فرار داده شود (escape شود)، یعنی به صورت "\e;" مشخص گردد\&. .PP جایگزینی پایه‌ای متغیرهای محیطی پشتیبانی می‌شود\&. از "${FOO}" به عنوان بخشی از یک کلمه، یا به عنوان کلمه‌ای مستقل، در خط فرمان استفاده کنید، که در این صورت پاک شده و با مقدار دقیق متغیر محیطی (در صورت وجود) شامل تمام فاصله‌های خالی موجود در آن جایگزین می‌شود، که همیشه دقیقاً منجر به یک آرگومان واحد می‌گردد\&. از "$FOO" به عنوان یک کلمه جداگانه در خط فرمان استفاده کنید، که در این صورت با مقدار متغیر محیطی که در فاصله‌های خالی تقسیم شده است جایگزین می‌شود، که منجر به صفر یا چند آرگومان خواهد شد\&. برای این نوع بسط، نقل‌قول‌ها هنگام تقسیم به کلمات رعایت شده و پس از آن حذف می‌شوند\&. .PP مثال: .sp .if n \{\ .RS 4 .\} .nf Environment="ONE=one" \*(AqTWO=two two\*(Aq ExecStart=echo $ONE $TWO ${TWO} .fi .if n \{\ .RE .\} .PP این دستور \fB/bin/echo\fR را با چهار آرگومان اجرا می‌کند: "one"، "two"، "two" و "two two"\&. .PP مثال: .sp .if n \{\ .RS 4 .\} .nf Environment=ONE=\*(Aqone\*(Aq "TWO=\*(Aqtwo\ &two\*(Aq\ &too" THREE= ExecStart=/bin/echo ${ONE} ${TWO} ${THREE} ExecStart=/bin/echo $ONE $TWO $THREE .fi .if n \{\ .RE .\} .PP این منجر به این می‌شود که /bin/echo دو بار فراخوانی شود، بار اول با آرگومان‌های "\*(Aqone\*(Aq"، "\*(Aqtwo\ &two\*(Aq\ &too"، ""، و بار دوم با آرگومان‌های "one"، "two\ &two"، "too"\&. .PP مگر برای دستوراتی با پیشوند اجرایی ویژه ":"، برای ارسال علامت دلار واقعی، از "$$" استفاده کنید\&. متغیرهایی که مقدار آن‌ها در زمان بسط مشخص نیست به عنوان رشته‌های خالی در نظر گرفته می‌شوند\&. توجه داشته باشید که آرگومان اول (یعنی برنامه‌ای که باید اجرا شود) نمی‌تواند یک متغیر باشد\&. .PP متغیرهایی که به این شیوه استفاده می‌شوند ممکن است از طریق \fIEnvironment=\fR و \fIEnvironmentFile=\fR تعریف شوند\&. علاوه بر این، متغیرهای فهرست‌شده در بخش "متغیرهای محیطی در فرآیندهای ایجادشده" در \fBsystemd.exec\fR(5) که به عنوان "پیکربندی ایستا" تلقی می‌شوند، ممکن است استفاده شوند (این شامل مواردی چون \fI$USER\fR می‌شود، اما نه \fI$TERM\fR)\&. .PP توجه داشته باشید که خطوط فرمان شل مستقیماً پشتیبانی نمی‌شوند\&. اگر قرار است خطوط فرمان شل استفاده شوند، باید به صورت صریح به یک پیاده‌سازی شل ارسال گردند\&. مثال: .sp .if n \{\ .RS 4 .\} .nf ExecStart=sh \-c \*(Aqdmesg | tac\*(Aq .fi .if n \{\ .RE .\} .PP مثال: .sp .if n \{\ .RS 4 .\} .nf ExecStart=echo one ExecStart=echo "two two" .fi .if n \{\ .RE .\} .PP این دستور \fBecho\fR را دو بار اجرا می‌کند، هر بار با یک آرگومان: به ترتیب "one" و "two two"\&. از آنجا که دو دستور مشخص شده است، \fIType=oneshot\fR باید استفاده شود\&. .PP مثال: .sp .if n \{\ .RS 4 .\} .nf Type=oneshot ExecStart=:echo $USER ExecStart=\-false ExecStart=+:@true $TEST .fi .if n \{\ .RE .\} .PP این دستور \fB/usr/bin/echo\fR را با آرگومان واقعی "$USER" (":" بسط متغیر را لغو می‌کند)، و سپس \fB/usr/bin/false\fR (مقدار بازگشتی نادیده گرفته می‌شود زیرا "\-" بررسی مقدار بازگشتی را غیرفعال می‌کند)، و \fB/usr/bin/true\fR (با امتیازات ارتقایافته، با "$TEST" به عنوان \fBargv[0]\fR) را اجرا خواهد کرد\&. .PP مثال: .sp .if n \{\ .RS 4 .\} .nf ExecStart=echo / >/dev/null & \e; \e ls .fi .if n \{\ .RE .\} .PP این دستور \fBecho\fR را با پنج آرگومان اجرا می‌کند: "/"، ">/dev/null"، "&"، ";" و "ls"\&. .SH "مثال‌ها (EXAMPLES)" .PP \fBمثال\ \&۳.\ \&سرویس ساده (Simple)\fR .PP فایل واحد زیر سرویسی ایجاد می‌کند که /usr/sbin/foo\-daemon را اجرا خواهد کرد\&. از آنجا که هیچ \fIType=\fR مشخص نشده است، پیش‌فرض \fIType=\fR\fBsimple\fR فرض خواهد شد\&. systemd فرض می‌کند که واحد بلافاصله پس از شروع اجرای برنامه آغاز شده است\&. .sp .if n \{\ .RS 4 .\} .nf [Unit] Description=Foo [Service] ExecStart=/usr/sbin/foo\-daemon [Install] WantedBy=multi\-user\&.target .fi .if n \{\ .RE .\} .PP توجه داشته باشید که systemd در اینجا فرض می‌کند فرآیندی که توسط systemd شروع شده است تا زمانی که سرویس خاتمه یابد به اجرای خود ادامه می‌دهد\&. اگر برنامه خود را دیمن می‌کند (یعنی fork می‌کند)، لطفاً در عوض از \fIType=\fR\fBforking\fR استفاده کنید\&. .PP از آنجا که هیچ \fIExecStop=\fR مشخص نشده است، systemd سیگنال SIGTERM و پس از یک مهلت زمانی همچنین SIGKILL را به تمام فرآیندهای شروع‌شده از این سرویس ارسال خواهد کرد\&. این رفتار را می‌توان تغییر داد، برای جزئیات به \fBsystemd.kill\fR(5) مراجعه کنید\&. .PP توجه داشته باشید که این نوع واحد شامل هیچ نوع اعلانی در هنگام تکمیل مقداردهی اولیه سرویس نیست\&. برای این منظور، باید از انواع دیگر واحد استفاده کنید، مانند \fIType=\fR\fBnotify\fR/\fIType=\fR\fBnotify\-reload\fR اگر سرویس پروتکل اعلان systemd را درک می‌کند، \fIType=\fR\fBforking\fR اگر سرویس می‌تواند خود را در پس‌زمینه قرار دهد یا \fIType=\fR\fBdbus\fR اگر واحد پس از تکمیل مقداردهی اولیه یک نام DBus به دست می‌آورد\&. به زیر مراجعه کنید\&. .PP \fBمثال\ \&۴.\ \&سرویس یک‌باره (Oneshot)\fR .PP گاهی اوقات، واحدها باید فقط یک عمل را بدون نگه داشتن فرآیندهای فعال اجرا کنند، مانند بررسی سیستم فایل یا عملیات پاک‌سازی در هنگام بوت\&. برای این منظور، \fIType=\fR\fBoneshot\fR وجود دارد\&. واحدهای این نوع منتظر می‌مانند تا فرآیند مشخص‌شده خاتمه یابد و سپس به وضعیت غیرفعال بازگردند\&. واحد زیر یک عملیات پاک‌سازی را انجام می‌دهد: .sp .if n \{\ .RS 4 .\} .nf [Unit] Description=Cleanup old Foo data [Service] Type=oneshot ExecStart=/usr/sbin/foo\-cleanup [Install] WantedBy=multi\-user\&.target .fi .if n \{\ .RE .\} .PP توجه داشته باشید که systemd واحد را تا زمان خاتمه برنامه در وضعیت "starting" در نظر می‌گیرد، بنابراین وابستگی‌های ترتیب‌بندی‌شده قبل از شروع خود منتظر پایان برنامه می‌مانند\&. واحد پس از انجام اجرا به وضعیت "inactive" بازمی‌گردد و هرگز به وضعیت "active" نمی‌رسد\&. این بدان معناست که یک درخواست دیگر برای شروع واحد، عملیات را مجدداً انجام خواهد داد\&. .PP واحدهای \fIType=\fR\fBoneshot\fR تنها واحدهای سرویسی هستند که ممکن است بیش از یک \fIExecStart=\fR برای آن‌ها مشخص شده باشد\&. برای واحدهایی با چندین دستور (\fIType=oneshot\fR)، تمام دستورات دوباره اجرا خواهند شد\&. .PP برای \fIType=oneshot\fR، مقادیر \fIRestart=\fR\fBalways\fR و \fIRestart=\fR\fBon\-success\fR مجاز \fIنیستند\fR\&. .PP \fBمثال\ \&۵.\ \&سرویس یک‌باره قابل توقف\fR .PP مشابه سرویس‌های oneshot، گاهی اوقات واحدهایی وجود دارند که باید برنامه‌ای را برای راه‌اندازی چیزی اجرا کنند و سپس برنامه دیگری را برای خاموش کردن آن اجرا نمایند، اما هیچ فرآیندی در حالی که آن‌ها "شروع‌شده" تلقی می‌شوند فعال باقی نمی‌ماند\&. پیکربندی شبکه گاهی می‌تواند در این دسته قرار گیرد\&. مورد کاربرد دیگر زمانی است که یک سرویس oneshot نباید هر بار که به عنوان یک وابستگی فراخوانی می‌شود اجرا گردد، بلکه فقط بار اول اجرا شود\&. .PP برای این منظور، systemd تنظیم \fIRemainAfterExit=\fR\fByes\fR را می‌شناسد، که باعث می‌شود در صورت خروج موفقیت‌آمیز عملیات شروع، systemd واحد را فعال در نظر بگیرد\&. این دستورالعمل می‌تواند با تمام انواع استفاده شود، اما با \fIType=\fR\fBoneshot\fR و \fIType=\fR\fBsimple\fR بیشترین کاربرد را دارد\&. با \fIType=\fR\fBoneshot\fR، systemd تا زمانی که عملیات شروع تکمیل نشود منتظر می‌ماند و سپس واحد را فعال تلقی می‌کند، بنابراین وابستگی‌ها تنها پس از موفقیت عملیات شروع آغاز می‌شوند\&. با \fIType=\fR\fBsimple\fR، وابستگی‌ها بلافاصله پس از اعزام عملیات شروع آغاز خواهند شد\&. واحد زیر مثالی برای یک دیوار آتش ایستای ساده ارائه می‌دهد\&. .sp .if n \{\ .RS 4 .\} .nf [Unit] Description=Simple firewall [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/sbin/simple\-firewall\-start ExecStop=/usr/local/sbin/simple\-firewall\-stop [Install] WantedBy=multi\-user\&.target .fi .if n \{\ .RE .\} .PP از آنجا که پس از خروج اقدام شروع، واحد در حال اجرا در نظر گرفته می‌شود، فراخوانی مجدد \fBsystemctl start\fR روی آن واحد باعث انجام هیچ اقدامی نخواهد شد\&. .PP \fBمثال\ \&۶.\ \&سرویس‌های سنتی Forking\fR .PP بسیاری از دیمن‌ها/سرویس‌های سنتی هنگام شروع خود را در پس‌زمینه قرار می‌دهند (یعنی fork و daemonize می‌کنند)\&. برای پشتیبانی از این حالت عملکرد، \fIType=\fR\fBforking\fR را در فایل واحد سرویس تنظیم کنید\&. systemd تا زمانی که برنامه اصلی هنوز در حال اجرا است سرویس را در مرحله مقداردهی اولیه در نظر می‌گیرد\&. هنگامی که با موفقیت خارج شد و حداقل یک فرآیند باقی ماند (و \fIRemainAfterExit=\fR\fBno\fR)، سرویس شروع‌شده تلقی می‌شود\&. .PP اغلب، یک دیمن سنتی تنها از یک فرآیند تشکیل شده است\&. بنابراین، اگر پس از خاتمه فرآیند اصلی تنها یک فرآیند باقی بماند، systemd آن فرآیند را فرآیند اصلی سرویس تلقی می‌کند\&. در این صورت، متغیر \fI$MAINPID\fR در \fIExecReload=\fR، \fIExecStop=\fR و غیره در دسترس خواهد بود\&. .PP در صورتی که بیش از یک فرآیند باقی بماند، systemd قادر به تعیین فرآیند اصلی نخواهد بود، بنابراین فرضی در مورد وجود آن نخواهد داشت\&. در این حالت، \fI$MAINPID\fR به چیزی بسط نمی‌یابد\&. با این حال، اگر فرآیند تصمیم بگیرد یک فایل PID سنتی بنویسد، systemd قادر خواهد بود PID اصلی را از آنجا بخواند\&. لطفاً \fIPIDFile=\fR را مطابق با آن تنظیم کنید\&. توجه داشته باشید که دیمن باید این فایل را قبل از پایان مقداردهی اولیه خود بنویسد\&. در غیر این صورت، systemd ممکن است قبل از وجود فایل سعی در خواندن آن داشته باشد\&. .PP مثال زیر دیمن ساده‌ای را نشان می‌دهد که انشعاب می‌یابد و صرفاً یک فرآیند را در پس‌زمینه شروع می‌کند: .sp .if n \{\ .RS 4 .\} .nf [Unit] Description=My Simple Daemon [Service] Type=forking ExecStart=/usr/sbin/my\-simple\-daemon \-d [Install] WantedBy=multi\-user\&.target .fi .if n \{\ .RE .\} .PP لطفاً برای جزئیات در مورد چگونگی تأثیرگذاری بر نحوه خاتمه سرویس توسط systemd، \fBsystemd.kill\fR(5) را ببینید\&. .PP \fBمثال\ \&۷.\ \&سرویس‌های DBus\fR .PP برای سرویس‌هایی که نامی را روی گذرگاه سیستم DBus به دست می‌آورند، از \fIType=\fR\fBdbus\fR استفاده کنید و \fIBusName=\fR را متناسب با آن تنظیم نمایید\&. سرویس نباید fork (daemonize) کند\&. systemd پس از تصاحب نام در گذرگاه سیستم، سرویس را مقداردهی‌شده تلقی خواهد کرد\&. مثال زیر یک سرویس معمولی DBus را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf [Unit] Description=Simple DBus Service [Service] Type=dbus BusName=org\&.example\&.simple\-dbus\-service ExecStart=/usr/sbin/simple\-dbus\-service [Install] WantedBy=multi\-user\&.target .fi .if n \{\ .RE .\} .PP برای سرویس‌های \fIbus\-activatable\fR، بخش [Install] را در فایل سرویس systemd قرار ندهید، بلکه از گزینه \fISystemdService=\fR در فایل سرویس DBus مربوطه استفاده کنید، برای مثال (/usr/share/dbus\-1/system\-services/org\&.example\&.simple\-dbus\-service\&.service): .sp .if n \{\ .RS 4 .\} .nf [D\-BUS Service] Name=org\&.example\&.simple\-dbus\-service Exec=/usr/sbin/simple\-dbus\-service User=root SystemdService=simple\-dbus\-service\&.service .fi .if n \{\ .RE .\} .PP لطفاً برای جزئیات در مورد چگونگی تأثیرگذاری بر نحوه خاتمه سرویس توسط systemd، \fBsystemd.kill\fR(5) را ببینید\&. .PP \fBمثال\ \&۸.\ \&سرویس‌هایی که مقداردهی اولیه خود را به systemd اعلان می‌کنند\fR .PP نوشتن سرویس‌های \fIType=\fR\fBsimple\fR بسیار آسان است، اما این عیب بزرگ را دارند که systemd نمی‌تواند تشخیص دهد چه زمانی مقداردهی اولیه سرویس داده‌شده کامل شده است\&. به همین دلیل، systemd از یک پروتکل اعلان ساده پشتیبانی می‌کند که به دیمن‌ها اجازه می‌دهد systemd را از اتمام مقداردهی اولیه خود مطلع کنند\&. برای این منظور از \fIType=\fR\fBnotify\fR یا \fIType=\fR\fBnotify\-reload\fR استفاده کنید\&. یک فایل سرویس معمولی برای چنین دیمنی به شکل زیر خواهد بود: .sp .if n \{\ .RS 4 .\} .nf [Unit] Description=Simple Notifying Service [Service] Type=notify\-reload ExecStart=/usr/sbin/simple\-notifying\-service [Install] WantedBy=multi\-user\&.target .fi .if n \{\ .RE .\} .PP توجه داشته باشید که دیمن باید از پروتکل اعلان systemd پشتیبانی کند، در غیر این صورت systemd فکر می‌کند سرویس هنوز شروع نشده است و پس از یک مهلت زمانی آن را می‌کشد\&. برای مثالی از نحوه به‌روزرسانی دیمن‌ها جهت پشتیبانی شفاف از این پروتکل، به \fBsd_notify\fR(3) نگاهی بیندازید\&. systemd واحد را تا زمانی که اعلان آمادگی دریافت شود در وضعیت 'starting' تلقی می‌کند\&. .PP لطفاً برای جزئیات در مورد چگونگی تأثیرگذاری بر نحوه خاتمه سرویس توسط systemd، \fBsystemd.kill\fR(5) را ببینید\&. .PP برای جلوگیری از تکرار کد، ترجیح داده می‌شود در صورت امکان از \fBsd_notify\fR(3) استفاده شود، به‌ویژه زمانی که سایر APIهای ارائه‌شده توسط \fBlibsystemd\fR(3) نیز استفاده می‌شوند، اما توجه داشته باشید که پروتکل اعلان بسیار ساده است و طبق \m[blue]\fBPromise پایداری و قابلیت حمل واسط\fR\m[]\&\s-2\u[4]\d\s+2 تضمین شده است که پایدار باشد، بنابراین می‌تواند توسط سرویس‌ها بدون هیچ‌گونه وابستگی خارجی بازپیاده‌سازی شود\&. برای یک مثال مستقل، به \fBsd_notify\fR(3) مراجعه کنید\&. .SH "همچنین ببینید (SEE ALSO)" .PP \fBsystemd\fR(1), \fBsystemctl\fR(1), \fBsystemd-system.conf\fR(5), \fBsystemd.unit\fR(5), \fBsystemd.exec\fR(5), \fBsystemd.resource-control\fR(5), \fBsystemd.kill\fR(5), \fBsystemd.directives\fR(7), \fBsystemd-run\fR(1) .SH "یادداشت‌ها (NOTES)" .IP " 1." 4 File Descriptor Store .RS 4 \%https://systemd.io/FILE_DESCRIPTOR_STORE .RE .IP " 2." 4 USB FunctionFS .RS 4 \%https://docs.kernel.org/usb/functionfs.html .RE .IP " 3." 4 Control Group v2 .RS 4 \%https://docs.kernel.org/admin-guide/cgroup-v2.html .RE .IP " 4." 4 Interface Portability and Stability Promise .RS 4 \%https://systemd.io/PORTABILITY_AND_STABILITY .RE