SYSTEMD.SOCKET(5)

الاسم
systemd.socket - تهيئة وحدة المقبس

موجز

socket.socket

الوصف

ملف تهيئة وحدة ينتهي اسمه بـ ".socket" يرمّز معلومات حول مقبس IPC أو شبكة أو FIFO نظام ملفات يتحكم به ويشرف عليه systemd، للتفعيل القائم على المقبس.

صفحة الدليل هذه تسرد خيارات التهيئة الخاصة بنوع الوحدة هذا. انظر systemd.unit(5) للخيارات المشتركة لجميع ملفات تهيئة الوحدات. عناصر التهيئة المشتركة تُهيأ في القسمين العامين [Unit] و[Install]. خيارات التهيئة الخاصة بالمقبس تُهيأ في القسم [Socket].

خيارات إضافية مُدرجة في systemd.exec(5)، والتي تُعرّف بيئة التنفيذ التي تُنفذ فيها أوامر ExecStartPre= وExecStartPost= وExecStopPre= وExecStopPost=، وفي systemd.kill(5)، والتي تُعرّف طريقة إنهاء العمليات، وفي systemd.resource-control(5)، والتي تُهيئ إعدادات التحكم بالموارد لعمليات المقبس.

لكل وحدة مقبس، يجب وجود وحدة خدمة مطابقة، تصف الخدمة التي ستبدأ عند حركة المرور الواردة على المقبس (انظر systemd.service(5) لمزيد من المعلومات حول وحدات .service). اسم وحدة .service هو مبدئيًا نفس اسم وحدة .socket، لكن يمكن تغييره بخيار Service= الموصوف أدناه. اعتمادًا على إعداد خيار Accept= الموصوف أدناه، يجب أن تُسمى وحدة .service هذه إما مثل وحدة .socket، لكن مع استبدال اللاحقة، ما لم تُتجاوز بـ Service=؛ أو يجب أن تكون وحدة قالب بنفس الاسم. مثال: ملف مقبس foo.socket يحتاج خدمة مطابقة foo.service إذا عُين Accept=no. إذا عُين Accept=yes، يجب وجود قالب خدمة foo@.service تُنشأ منه خدمات لكل اتصال وارد.

لا تُضاف تبعية ضمنية WantedBy= أو RequiredBy= من المقبس إلى الخدمة. هذا يعني أن الخدمة قد تُبدأ بدون المقبس، وفي هذه الحالة يجب أن تكون قادرة على فتح المقابس بنفسها. لمنع هذا، يمكن إضافة تبعية Requires= صريحة.

يمكن استخدام وحدات المقبس لتنفيذ بدء الخدمات عند الطلب، بالإضافة إلى بدء الخدمات بشكل متوازٍ. انظر قصص المدونة المرتبطة في النهاية للحصول على مقدمة.

لاحظ أن برنامج الخفي المُهيأ لتفعيل المقبس مع وحدات المقبس يحتاج إلى أن يكون قادرًا على قبول المقابس من systemd، إما عبر واجهة تمرير المقابس الأصلية لـ systemd (انظر sd_listen_fds(3) للتفاصيل حول البروتوكول الدقيق المستخدم وترتيب تمرير واصفات الملفات) أو عبر تمرير المقابس بنمط inetd(8) التقليدي (أي المقابس الممررة عبر الإدخال والإخراج القياسيين، باستخدام StandardInput=socket في ملف الخدمة).

مبدئيًا، تُخصص مقابس الشبكة المخصصة عبر وحدات .socket في مساحة اسم الشبكة للمضيف (انظر network_namespaces(7)). هذا لا يعني مع ذلك أن الخدمة المُفعّلة بواسطة وحدة مقبس مُهيأة يجب أن تكون جزءًا من مساحة اسم الشبكة للمضيف أيضًا. من المدعوم بل ومن الممارسة الجيدة تشغيل الخدمات في مساحة اسم الشبكة الخاصة بها (على سبيل المثال عبر PrivateNetwork=، انظر systemd.exec(5))، مع استقبال فقط المقابس المُهيأة عبر تفعيل المقبس من مساحة اسم المضيف. في مثل هذا الإعداد، يُسمح بالاتصال داخل مساحة اسم الشبكة للمضيف فقط عبر مقابس التفعيل الممررة بينما جميع المقابس المخصصة من كود الخدمة نفسه ستُربط بمساحة اسم الخدمة الخاصة، وبالتالي قد تخضع لتهيئة تقييدية.

بدلاً من ذلك، من الممكن تشغيل وحدة .socket في مساحة اسم شبكة أخرى عن طريق تعيين PrivateNetwork=yes مع JoinsNamespaceOf=، انظر systemd.exec(5) وsystemd.unit(5) للتفاصيل.

اعتمادات آلية

  التبعيات الضمنية

تُضاف التبعيات التالية ضمنيًا:

    • وحدات المقبس تكتسب آليًا تبعية Before= على وحدات الخدمة التي تُفعّلها.

    • وحدات المقبس التي تشير إلى مسارات نظام الملفات (مثل مقابس AF_UNIX أو FIFOs) تكتسب ضمنيًا تبعيات Requires= وAfter= على جميع وحدات الوصل اللازمة للوصول إلى تلك المسارات.

    • وحدات المقبس التي تستخدم إعداد BindToDevice= تكتسب آليًا تبعية BindsTo= وAfter= على وحدة الجهاز التي تغلف واجهة الشبكة المحددة.

قد تُضاف اعتماديات ضمنية إضافية نتيجةً لمعاملات التنفيذ والتحكم في الموارد كما وُثقت في systemd.exec(5) و systemd.resource-control(5).

  الاعتمادات المبدئية

تُضاف الاعتماديات التالية ما لم يُضبط DefaultDependencies=no:

    • وحدات المقبس تكتسب آليًا تبعية Before= على sockets.target.

    • وحدات المقبس تكتسب آليًا زوجًا من تبعيات After= وRequires= على sysinit.target، وزوجًا من تبعيات Before= وConflicts= على shutdown.target. هذه التبعيات تضمن بدء وحدة المقبس قبل الخدمات العادية عند الإقلاع، وإيقافها عند الإغلاق. فقط المقابس المتعلقة بالإقلاع المبكر أو إغلاق النظام المتأخر يجب أن تعطل خيار DefaultDependencies=.

الخيارات

ملفات وحدات المقبس قد تتضمن قسمي [Unit] و[Install]، الموصوفين في systemd.unit(5).

ملفات وحدات المقبس يجب أن تتضمن قسم [Socket]، الذي يحمل معلومات حول المقبس أو FIFO الذي تشرف عليه. عدد من الخيارات التي قد تُستخدم في هذا القسم مشتركة مع أنواع وحدات أخرى. هذه الخيارات موثقة في systemd.exec(5) وsystemd.kill(5) وsystemd.resource-control(5). الخيارات الخاصة بقسم [Socket] لوحدات المقبس هي التالية:

ListenStream=, ListenDatagram=, ListenSequentialPacket=
    يحدد عنوانًا للاستماع عليه لمقبس دفق (SOCK_STREAM) أو مخطط بيانات (SOCK_DGRAM) أو حزمة متسلسلة (SOCK_SEQPACKET)، على التوالي. يمكن كتابة العنوان بتنسيقات مختلفة:

    إذا بدأ العنوان بشرطة مائلة ("/")، يُقرأ كمقبس نظام ملفات في عائلة مقابس AF_UNIX.

    إذا بدأ العنوان برمز "@"، يُقرأ كمقبس مساحة اسم مجردة في عائلة AF_UNIX. يُستبدل "@" بحرف NUL قبل الربط. للتفاصيل، انظر unix(7).

    إذا كانت سلسلة العنوان رقمًا واحدًا، فتُقرأ كرقم منفذ للاستماع عبر IPv6. اعتمادًا على قيمة BindIPv6Only= (انظر أدناه)، قد يؤدي ذلك إلى جعل الخدمة متاحة عبر كل من IPv6 وIPv4 (المبدئي) أو عبر IPv6 فقط.

    إذا كانت سلسلة العنوان سلسلة بالتنسيق "v.w.x.y:z"، فتُفسر كعنوان IPv4 v.w.x.y ومنفذ z.

    إذا كانت سلسلة العنوان سلسلة بالتنسيق "[x]:y"، فتُفسر كعنوان IPv6 x ومنفذ y. يمكن تحديد نطاق واجهة اختياري (اسم الواجهة أو رقمها) بعد رمز "%": "[x]:y%dev". نطاقات الواجهة مفيدة فقط مع عناوين الرابط المحلي، لأن النواة تتجاهلها في الحالات الأخرى. لاحظ أنه إذا حُدد عنوان كـ IPv6، فقد يظل يجعل الخدمة متاحة عبر IPv4 أيضًا، اعتمادًا على إعداد BindIPv6Only= (انظر أدناه).

    إذا كانت سلسلة العنوان سلسلة بالتنسيق "vsock:x:y"، فتُقرأ كـ CID x على منفذ y في عائلة AF_VSOCK. CID هو معرف عدد صحيح فريد 32 بت في AF_VSOCK مماثل لعنوان IP. تحديد CID اختياري، ويمكن تعيينه إلى سلسلة فارغة. يمكن استبدال "vsock" بـ "vsock-stream" أو "vsock-dgram" أو "vsock-seqpacket" لفرض استخدام نوع المقبس المقابل.

    لاحظ أن SOCK_SEQPACKET (أي ListenSequentialPacket=) متاح فقط لمقابس AF_UNIX. SOCK_STREAM (أي ListenStream=) عند استخدامه لمقابس IP يشير إلى مقابس TCP، SOCK_DGRAM (أي ListenDatagram=) إلى UDP.

    يمكن تحديد هذه الخيارات أكثر من مرة، وفي هذه الحالة، سيؤدي حركة المرور الواردة على أي من المقابس إلى تفعيل الخدمة، وستُمرر جميع المقابس المدرجة إلى الخدمة، بغض النظر عن وجود حركة مرور واردة عليها أم لا. إذا عُين السلسلة الفارغة لأي من هذه الخيارات، فستُعاد تعيين قائمة العناوين للاستماع، ولن يكون لأي استخدام سابق لأي من هذه الخيارات أي تأثير.

    من الممكن أيضًا وجود أكثر من وحدة مقبس لنفس الخدمة عند استخدام Service=، وستتلقى الخدمة جميع المقابس المكونة في جميع وحدات المقابس. تُمرر المقابس المكونة في وحدة واحدة بترتيب التكوين، ولكن لا يُحدد ترتيب بين وحدات المقابس.

    إذا اُستخدم عنوان IP هنا، فغالبًا ما يكون من المرغوب الاستماع عليه قبل أن تكون الواجهة التي كُوّنَ عليها قيد التشغيل، وحتى بغض النظر عما إذا كانت ستكون قيد التشغيل في أي وقت. للتعامل مع هذا، يُوصى بتعيين خيار FreeBind= الموضح أدناه.

ListenFIFO=
    يحدد FIFO لنظام الملفات (انظر fifo(7) للتفاصيل) للاستماع عليه. يتوقع مسار نظام ملفات مطلق كوسيطة. السلوك بخلاف ذلك مشابه جدًا لتوجيه ListenDatagram= أعلاه.

ListenSpecial=
    يحدد ملفًا خاصًا في نظام الملفات للاستماع عليه. يتوقع مسار نظام ملفات مطلق كوسيطة. السلوك بخلاف ذلك مشابه جدًا لتوجيه ListenFIFO= أعلاه. استخدم هذا لفتح عُقد أجهزة الأحرف بالإضافة إلى الملفات الخاصة في /proc/ و /sys/.

ListenNetlink=
    يحدد عائلة Netlink لإنشاء مقبس للاستماع عليه. يتوقع سلسلة قصيرة تشير إلى اسم عائلة AF_NETLINK (مثل audit أو kobject-uevent) كوسيطة، مع لاحقة اختيارية بمسافة متبوعة بعدد صحيح لمجموعة البث المتعدد. السلوك بخلاف ذلك مشابه جدًا لتوجيه ListenDatagram= أعلاه.

ListenMessageQueue=
    يحدد اسم قائمة انتظار رسائل POSIX للاستماع عليها (انظر mq_overview(7) للتفاصيل). يتوقع اسم قائمة انتظار رسائل صالح (أي يبدأ بـ "/"). السلوك بخلاف ذلك مشابه جدًا لتوجيه ListenFIFO= أعلاه. في Linux، واصفات قائمة انتظار الرسائل هي في الواقع واصفات ملفات ويمكن توريثها بين العمليات.

ListenUSBFunction=
    يحدد موقع نقاط نهاية USB FunctionFS[1] للاستماع إليها، لتنفيذ وظائف أداة USB. يتوقع هذا مسار نظام ملفات مطلق لنقطة وصل FunctionFS كمعامل. السلوك بخلاف ذلك يشبه جداً توجيه ListenFIFO= أعلاه. استخدم هذا لفتح نقطة نهاية FunctionFS المسماة ep0. عند استخدام هذا الخيار، يجب أن تكون الخدمة الملحّة مضبوطة بخياري USBFunctionDescriptors= و USBFunctionStrings=.

    أُضيف في الإصدارة 227.

SocketProtocol=
    يأخذ واحدًا من udplite أو sctp أو mptcp. سيستخدم المقبس بروتوكول UDP-Lite (IPPROTO_UDPLITE) أو SCTP (IPPROTO_SCTP) أو MPTCP (IPPROTO_MPTCP)، على التوالي.

    أُضيف في الإصدارة 229.

BindIPv6Only=
    يأخذ واحدًا من default أو both أو ipv6-only. يتحكم في خيار مقبس IPV6_V6ONLY (انظر ipv6(7) للتفاصيل). إذا كان both، فستكون مقابس IPv6 المرتبطة قابلة للوصول عبر كل من IPv4 وIPv6. إذا كان ipv6-only، فستكون قابلة للوصول عبر IPv6 فقط. إذا كان default (وهو المبدئي، مفاجأة!)، يُستخدم الإعداد المبدئي للنظام بأكمله، كما يتحكم فيه /proc/sys/net/ipv6/bindv6only، والذي بدوره يكون مبدئيًا مكافئًا لـ both.

Backlog=
    يأخذ وسيطة عدد صحيح غير موقع 32 بت. يحدد عدد الاتصالات في قائمة الانتظار التي لم تُقبل بعد. هذا الإعداد مهم فقط لمقابس التدفق والحزم المتسلسلة. انظر listen(2) للتفاصيل. المبدئي هو 4294967295. لاحظ أن هذه القيمة تُحدد بصمت بواسطة sysctl "net.core.somaxconn"، والذي يكون مبدئيًا 4096 عادةً، لذا فإن sysctl هو الإعداد المهم فعليًا.

BindToDevice=
    يحدد اسم واجهة شبكة لربط هذا المقبس بها. إذا عُين، فسيُقبل حركة المرور فقط من واجهات الشبكة المحددة. يتحكم هذا في خيار مقبس SO_BINDTODEVICE (انظر socket(7) للتفاصيل). إذا اُستخدم هذا الخيار، فستُنشئ تبعية ضمنية من وحدة المقبس هذه على وحدة جهاز واجهة الشبكة (انظر systemd.device(5)). لاحظ أن تعيين هذه المعلمة قد يؤدي إلى إضافة تبعيات إضافية إلى الوحدة (انظر أعلاه).

SocketUser=, SocketGroup=
    يأخذ اسم مستخدم/مجموعة UNIX. عند تحديده، تؤول ملكية جميع مقابس AF_UNIX، وعقد FIFO، وصفوف الرسائل إلى المستخدم والمجموعة المحددين. إذا لم يُضبط (المبدئي)، تؤول ملكية العقد إلى المستخدم/المجموعة الجذر (إذا نُفذ في سياق النظام) أو المستخدم/المجموعة المستدعِية (إذا نُفذ في سياق المستخدم). إذا حُدد مستخدم فقط دون مجموعة، تُشتق المجموعة من مجموعة المستخدم المبدئية.

    أُضيف في الإصدارة 214.

SocketMode=
    إذا كان الاستماع يجري على مقبس نظام ملفات، أو FIFO، أو صف رسائل، يحدد هذا الخيار وضع الوصول لنظام الملفات المستخدم عند إنشاء عقدة الملف. يأخذ وضع الوصول بالترميز الثماني. القيمة المبدئية هي 0666.

DirectoryMode=
    إذا كان الاستماع يجري على مقبس نظام ملفات أو FIFO، تُنشأ الأدلة الأبوية آلياً عند الحاجة. يحدد هذا الخيار وضع الوصول لنظام الملفات المستخدم عند إنشاء هذه الأدلة. يأخذ وضع الوصول بالترميز الثماني. القيمة المبدئية هي 0755.

Accept=
    يقبل وسيطًا منطقيًا. إذا كان نعم، يُنشئ مثيل خدمة لكل اتصال وارد ويُمرر إليه مقبس الاتصال فقط. إذا كان لا، تُمرر جميع مقابس الاستماع نفسها إلى وحدة الخدمة المُشغلة، ويُشغل مثيل خدمة واحد فقط لجميع الاتصالات (انظر أيضًا أعلاه). تُتجاهل هذه القيمة لمقابس الرزم (datagram) وقنوات FIFO حيث تتعامل وحدة خدمة واحدة مع جميع حركة المرور الواردة دون شرط. المبدئي هو لا.

    عادةً، للخدمات الحساسة للأداء، يُفضل اختيار Accept=no، لأن بهذه الطريقة سيتحمل الاتصال الأول فقط تكلفة موارد التنشيط. من ناحية أخرى، للخدمات المُستخدمة بشكل متقطع، يمكن أن يكون Accept=yes مفضلاً لأنه يُبسط التنفيذ (حيث أن كود برنامج الخدمة يحتاج فقط لمعالجة اتصال واحد بدلاً من التعامل مع عدة اتصالات) ويُمكّن أمانًا أقوى (حيث يمكن استخدام خيارات العزل (sandboxing) المختلفة لعزل الاتصالات المتوازية عن بعضها البعض، حيث يُخدم كل اتصال بواسطة مثيل خدمة وعملية منفصلين).

    خدمة تستمع على مقبس AF_UNIX قد، ولكن لا تحتاج إلى، استدعاء close(2) على المقبس المُستقبل قبل الخروج. ومع ذلك، يجب ألا تفصل (unlink) المقبس من نظام الملفات. يجب ألا تستدعي shutdown(2) على المقابس التي حصلت عليها مع Accept=no، ولكن قد تفعل ذلك للمقابس التي حصلت عليها مع تعيين Accept=yes.

    تعيين Accept=yes مفيد بشكل خاص للسماح للشياطين (daemons) المُصممة للاستخدام مع inetd(8) بالعمل دون تعديل مع تنشيط مقبس systemd.

    لاحظ أنه اعتمادًا على هذا الإعداد، فإن الخدمات المُنشطة بواسطة وحدات من هذا النوع إما خدمات عادية (في حالة Accept=no) أو مثيلات لخدمات مُقوْلبة (في حالة Accept=yes). راجع قسم الوصف أعلاه لمناقشة أكثر تفصيلاً لقواعد تسمية الخدمات المُحفزة.

    لاتصالات IPv4 و IPv6، سيحتوي متغير البيئة $REMOTE_ADDR على عنوان IP البعيد، وسيحتوي $REMOTE_PORT على رقم المنفذ البعيد. يتوافق هذان المتغيران مع تلك المُعرّفة بواجهة CGI لخدمات الويب (انظر RFC 3875[2]).

    لاتصالات مقبس AF_UNIX، سيحتوي متغير البيئة $REMOTE_ADDR إما على مسار نظام الملفات للمقبس البعيد بدءًا بشرطة مائلة ("/") أو عنوانه في الفضاء المجرد (abstract namespace) بدءًا برمز "@". إذا كان المقبس غير مُسمى، فلن يُعيّن $REMOTE_ADDR.

    إذا استُخدم Accept=yes، فستكون عملية الخدمة المُنشطة قد عيّنت متغير البيئة $SO_COOKIE إلى كعكة مقبس Linux، مُنسقة كعدد صحيح عشري. يمكن الحصول على كعكة المقبس بخلاف ذلك عبر getsockopt(7).

    يُوصى بتعيين CollectMode=inactive-or-failed لمثيلات الخدمة المُنشطة عبر Accept=yes، لضمان تنظيف خدمات الاتصال الفاشلة وتحريرها من الذاكرة، وعدم تراكمها.

Writable=
    يقبل وسيطًا منطقيًا. يمكن استخدامه فقط مع ListenSpecial=. إذا كان صحيحًا، يُفتح الملف الخاص المُحدد في وضع القراءة-الكتابة، وإذا كان خطأ، في وضع القراءة فقط. المبدئي هو خطأ.

    أُضيف في الإصدارة 227.

FlushPending=
    يقبل وسيطًا منطقيًا. يمكن استخدامه فقط عندما Accept=no. إذا كان نعم، تُمسح مخازن المقبس المؤقتة بعد خروج الخدمة المُحفزة. يتسبب هذا في تفريغ أي بيانات معلقة ورفض أي اتصالات واردة معلقة. إذا كان لا، لن تُمسح مخازن المقبس المؤقتة، مما يسمح للخدمة بمعالجة أي اتصالات معلقة بعد إعادة التشغيل، وهو السلوك المتوقع عادةً. المبدئي هو لا.

    أُضيف في الإصدار 247.

MaxConnections=
    الحد الأقصى لعدد الاتصالات لتشغيل مثيلات الخدمة بشكل متزامن، عند تعيين Accept=yes. إذا جاءت اتصالات متزامنة أكثر، فستُرفض حتى يُنهى اتصال موجود واحد على الأقل. ليس لهذا الإعداد تأثير على المقابس المُهيأة بـ Accept=no أو مقابس الرزم (datagram). المبدئي هو 64.

MaxConnectionsPerSource=
    الحد الأقصى لعدد الاتصالات لخدمة لكل عنوان IP مصدر (في حالة IPv4/IPv6)، لكل CID مصدر (في حالة AF_VSOCK)، أو UID مصدر (في حالة AF_UNIX). هذا مشابه جدًا للتوجيه MaxConnections= أعلاه. المبدئي هو 0، أي معطل.

    أُضيف في الإصدار 232.

KeepAlive=
    يقبل وسيطًا منطقيًا. إذا كان صحيحًا، سيرسل مكدس TCP/IP رسالة إبقاء على قيد الحياة (keep alive) بعد ساعتين (اعتمادًا على تهيئة /proc/sys/net/ipv4/tcp_keepalive_time) لجميع تدفقات TCP المُقبولة على هذا المقبس. يتحكم هذا في خيار مقبس SO_KEEPALIVE (انظر socket(7) و TCP Keepalive HOWTO[3] للتفاصيل.) المبدئي هو خطأ.

KeepAliveTimeSec=
    يقبل وقتًا (بالثواني) كوسيط. يحتاج الاتصال إلى البقاء خاملاً قبل أن يبدأ TCP في إرسال استقصاءات الإبقاء على قيد الحياة. يتحكم هذا في خيار مقبس TCP_KEEPIDLE (انظر socket(7) و TCP Keepalive HOWTO[3] للتفاصيل.) القيمة المبدئية هي 7200 ثانية (ساعتان).

    أُضيف في الإصدارة 216.

KeepAliveIntervalSec=
    يقبل وقتًا (بالثواني) كوسيط بين استقصاءات الإبقاء على قيد الحياة الفردية، إذا عُين خيار مقبس SO_KEEPALIVE على هذا المقبس. يتحكم هذا في خيار مقبس TCP_KEEPINTVL (انظر socket(7) و TCP Keepalive HOWTO[3] للتفاصيل.) القيمة المبدئية هي 75 ثانية.

    أُضيف في الإصدارة 216.

KeepAliveProbes=
    يقبل عددًا صحيحًا كوسيط. هو عدد الاستقصاءات غير المؤكدة لإرسالها قبل اعتبار الاتصال ميتًا وإخطار طبقة التطبيق. يتحكم هذا في خيار مقبس TCP_KEEPCNT (انظر socket(7) و TCP Keepalive HOWTO[3] للتفاصيل.) القيمة المبدئية هي 9.

    أُضيف في الإصدارة 216.

NoDelay=
    يقبل وسيطًا منطقيًا. تعمل خوارزمية Nagle لـ TCP من خلال دمج عدد من الرسائل الصغيرة الصادرة، وإرسالها جميعًا مرة واحدة. يتحكم هذا في خيار مقبس TCP_NODELAY (انظر tcp(7)). المبدئي هو خطأ.

    أُضيف في الإصدارة 216.

Priority=
    يقبل وسيطًا صحيحًا يتحكم في الأولوية لجميع حركة المرور المُرسلة من هذا المقبس. يتحكم هذا في خيار مقبس SO_PRIORITY (انظر socket(7) للتفاصيل.).

DeferAcceptSec=
    يأخذ الوقت (بالثواني) كمعامل. إذا ضُبط، ستُوقظ عملية الاستماع فقط عند وصول بيانات إلى المقبس، وليس فوراً عند إنشاء الاتصال. عند ضبط هذا الخيار، سيُستخدم خيار المقبس TCP_DEFER_ACCEPT (انظر tcp(7))، وستتجاهل النواة حزم ACK الأولية الخالية من البيانات. يحدد المعامل مقدار الوقت التقريبي الذي يجب على النواة انتظاره لورود البيانات قبل العودة إلى السلوك العادي المتمثل في قبول حزم ACK الفارغة. هذا الخيار مفيد للبروتوكولات التي يرسل فيها العميل البيانات أولاً (مثل HTTP، على عكس SMTP)، لأن عملية الخادوم لن تُوقظ بلا داعٍ قبل أن تتمكن من اتخاذ أي إجراء.

    إذا استخدم العميل أيضًا خيار TCP_DEFER_ACCEPT، فقد ينخفض زمن الوصول للاتصال الأولي، لأن النواة سترسل البيانات في الحزمة الأخيرة التي تؤسس الاتصال (الحزمة الثالثة في "المصافحة الثلاثية").

    معطل مبدئيًا.

    أُضيف في الإصدارة 216.

ReceiveBuffer=, SendBuffer=
    يأخذ وسيطة عددية تتحكم في أحجام مخازن الاستقبال أو الإرسال لهذه المقبس، على التوالي. يتحكم هذا في خيارات المقبس SO_RCVBUF وSO_SNDBUF (انظر socket(7) للتفاصيل.). اللواحق المعتادة K، M، G مدعومة وتُفهم على أساس 1024.

IPTOS=
    يأخذ وسيطة عددية تتحكم في حقل نوع الخدمة IP للحزم المولدة من هذا المقبس. يتحكم هذا في خيار المقبس IP_TOS (انظر ip(7) للتفاصيل.). يمكن تحديد سلسلة رقمية أو واحدة من low-delay، throughput، reliability أو low-cost.

IPTTL=
    يأخذ وسيطة عددية تتحكم في حقل وقت الحياة IPv4/عدد القفزات IPv6 للحزم المولدة من هذا المقبس. يضبط هذا خيارات المقبس IP_TTL/IPV6_UNICAST_HOPS (انظر ip(7) وipv6(7) للتفاصيل.)

Mark=
    يأخذ قيمة عددية. يتحكم في علامة جدار الحماية للحزم المولدة من هذا المقبس. يمكن استخدام هذا في منطق جدار الحماية لتصفية الحزم من هذا المقبس. يضبط هذا خيار المقبس SO_MARK. انظر iptables(8) للتفاصيل.

ReusePort=
    يأخذ قيمة منطقية. إذا كانت صحيحة، يسمح بعمليات bind(2) متعددة لهذا المنفذ TCP أو UDP. يتحكم هذا في خيار المقبس SO_REUSEPORT. انظر socket(7) للتفاصيل.

    أُضيف في الإصدارة 206.

SmackLabel=, SmackLabelIPIn=, SmackLabelIPOut=
    يأخذ قيمة سلسلة. يتحكم في السمات الموسعة "security.SMACK64"، "security.SMACK64IPIN" و"security.SMACK64IPOUT"، على التوالي، أي تسمية الأمان لـ FIFO، أو تسمية الأمان للاتصالات الواردة أو الصادرة من المقبس، على التوالي. انظر Smack[4] للتفاصيل.

    أُضيف في الإصدارة 196.

SELinuxContextFromNet=
    يأخذ وسيطة منطقية. عندما تكون صحيحة، سيحاول systemd تحديد تسمية SELinux المستخدمة للخدمة المثبتة من المعلومات المقدمة من النظير عبر الشبكة. لاحظ أن مستوى الأمان فقط يُستخدم من المعلومات المقدمة من النظير. الأجزاء الأخرى من سياق SELinux الناتج تنشأ إما من الثنائي الهدف الذي يُشغل فعليًا بواسطة وحدة المقبس أو من قيمة خيار SELinuxContext=. ينطبق خيار التهيئة هذا فقط عندما تُمرر الخدمة المفعلة في واصف ملف مقبس واحد، أي مثيلات الخدمة التي لها إدخال قياسي متصل بمقبس أو خدمات تُشغل بواسطة وحدة مقبس واحدة بالضبط. لاحظ أيضًا أن هذا الخيار مفيد فقط عند نشر سياسة SELinux MLS/MCS. المبدئي هو "false".

    أُضيف في الإصدارة 217.

PipeSize=
    يأخذ حجمًا بالبايت. يتحكم في حجم مخزن الأنبوب لـ FIFOs المكونة في وحدة المقبس هذه. انظر fcntl(2) للتفاصيل. اللواحق المعتادة K، M، G مدعومة وتُفهم على أساس 1024.

MessageQueueMaxMessages=, MessageQueueMessageSize=
    تأخذ هاتان الإعدادتان قيمًا عددية وتتحكمان في حقل mq_maxmsg أو حقل mq_msgsize، على التوالي، عند إنشاء قائمة انتظار الرسائل. لاحظ أنه يجب تعيين أي من هذين المتغيرين أو كليهما. انظر mq_setattr(3) للتفاصيل.

FreeBind=
    يأخذ قيمة منطقية. يتحكم في ما إذا كان يمكن ربط المقبس بعناوين IP غير محلية. هذا مفيد لتكوين مقابس تستمع على عناوين IP محددة قبل تكوين تلك العناوين بنجاح على واجهة شبكة. يضبط هذا خيار المقبس IP_FREEBIND/IPV6_FREEBIND. لأسباب المتانة، يُوصى باستخدام هذا الخيار كلما ربطت مقبسًا بعنوان IP محدد. المبدئي هو false.

Transparent=
    يأخذ قيمة منطقية. يتحكم في خيار المقبس IP_TRANSPARENT/IPV6_TRANSPARENT. المبدئي هو false.

Broadcast=
    يأخذ قيمة منطقية. يتحكم هذا في خيار المقبس SO_BROADCAST، الذي يسمح بإرسال مخططات بيانات البث من هذا المقبس. المبدئي هو false.

PassCredentials=
    يأخذ قيمة منطقية. يتحكم هذا في خيار المقبس SO_PASSCRED، الذي يسمح لمقابس AF_UNIX باستقبال بيانات اعتماد العملية المرسلة في رسالة مساعدة. المبدئي هو false.

PassPIDFD=
    يأخذ قيمة منطقية. يتحكم هذا في خيار المقبس SO_PASSPIDFD، الذي يسمح لمقابس AF_UNIX باستقبال pidfd للعملية المرسلة في رسالة مساعدة. المبدئي هو false.

    أُضيف في الإصدار 258.

PassSecurity=
    يأخذ قيمة منطقية. يتحكم هذا في خيار المقبس SO_PASSSEC، الذي يسمح لمقابس AF_UNIX باستقبال سياق الأمان للعملية المرسلة في رسالة مساعدة. المبدئي هو false.

PassPacketInfo=
    يأخذ قيمة منطقية. يتحكم هذا في خيارات المقبس IP_PKTINFO، IPV6_RECVPKTINFO، NETLINK_PKTINFO أو PACKET_AUXDATA، التي تمكن استقبال بيانات وصفية إضافية لكل حزمة كرسالة مساعدة، على مقابس AF_INET، AF_INET6، AF_UNIX وAF_PACKET. المبدئي هو false.

    أُضيف في الإصدار 246.

AcceptFileDescriptors=
    يأخذ قيمة منطقية. يتحكم هذا في خيار المقبس SO_PASSRIGHTS، الذي عند تعطيله يمنع النظير من إرسال رسائل مساعدة SCM_RIGHTS (المعروفة بواصفات الملفات) عبر مقابس AF_UNIX. المبدئي هو true.

    أُضيف في الإصدار 258.

Timestamping=
    يأخذ واحدة من "off"، "us" (الاسم المستعار: "usec"، "μs") أو "ns" (الاسم المستعار: "nsec"). يتحكم هذا في خيارات المقبس SO_TIMESTAMP أو SO_TIMESTAMPNS، ويمكّن ما إذا كان حركة مرور الشبكة الواردة ستحمل بيانات وصفية للطابع الزمني. المبدئي هو off.

    أُضيف في الإصدار 247.

TCPCongestion=
    يأخذ قيمة نصية. يتحكم في خوارزمية ازدحام TCP المستخدمة بواسطة هذا المقبس. يجب أن تكون إحدى "westwood" أو "reno" أو "cubic" أو "lp" أو أي خوارزمية أخرى متاحة يدعمها مكدس IP. ينطبق هذا الإعداد فقط على مقابس التدفق.

ExecStartPre=، ExecStartPost=
    يأخذ سطر أوامر واحد أو أكثر، تُنفذ قبل أو بعد إنشاء وربط مقابس الاستماع/FIFOs، على التوالي. يجب أن يكون الرمز الأول من سطر الأوامر اسم ملف مطلق، متبوعًا بالوسائط الخاصة بالعملية. يمكن تحديد أسطر أوامر متعددة باتباع نفس المخطط المستخدم لـ ExecStartPre= في ملفات وحدات الخدمة.

ExecStopPre=, ExecStopPost=
    أوامر إضافية تُنفذ قبل أو بعد إغلاق وإزالة مقابس الاستماع/FIFOs، على التوالي. يمكن تحديد أسطر أوامر متعددة باتباع نفس المخطط المستخدم لـ ExecStartPre= في ملفات وحدات الخدمة.

TimeoutSec=
    يهيئ الوقت للانتظار حتى انتهاء الأوامر المحددة في ExecStartPre= و ExecStartPost= و ExecStopPre= و ExecStopPost=. إذا لم يخرج الأمر خلال الوقت المهيأ، يعتبر المقبس فاشلًا ويُوقف تشغيله مرة أخرى. تُنهى جميع الأوامر التي لا تزال قيد التشغيل بالقوة عبر SIGTERM، وبعد تأخير إضافي بنفس الوقت باستخدام SIGKILL. (انظر KillMode= في systemd.kill(5).) يأخذ قيمة بدون وحدة بالثواني، أو قيمة زمنية مثل "5min 20s". مرر "0" لتعطيل منطق المهلة. المبدئي هو DefaultTimeoutStartSec= من ملف تهيئة المدير (انظر systemd-system.conf(5)).

Service=
    يحدد اسم وحدة الخدمة لتفعيلها عند حركة المرور الواردة. هذا الإعداد مسموح به فقط للمقابس ذات Accept=no. المبدئي هو الخدمة التي تحمل نفس اسم المقبس (مع استبدال اللاحقة). في معظم الحالات، لا ينبغي أن يكون من الضروري استخدام هذا الخيار. لاحظ أن تعيين هذه المعلمة قد يؤدي إلى إضافة تبعيات إضافية للوحدة (انظر أعلاه).

RemoveOnStop=
    يأخذ وسيطة منطقية. إذا فُعّل، تُزال أي عقد ملفات مُنشأة بواسطة وحدة المقبس هذه عند إيقافها. ينطبق هذا على مقابس AF_UNIX في نظام الملفات، وقوائم انتظار رسائل POSIX، وFIFOs، بالإضافة إلى أي روابط رمزية لها مهيأة بـ Symlinks=. عادةً، لا ينبغي أن يكون من الضروري استخدام هذا الخيار، ولا يُوصى به لأن الخدمات قد تستمر في العمل بعد إنهاء وحدة المقبس ويجب أن يظل من الممكن التواصل معها عبر عقدة نظام الملفات الخاصة بها. المبدئي هو إيقاف التشغيل.

    أُضيف في الإصدارة 214.

Symlinks=
    يأخذ قائمة بمسارات نظام الملفات. يُنشئ المسارات المحددة كروابط رمزية لمسار مقبس AF_UNIX أو مسار FIFO لوحدة المقبس هذه. إذا اُستخدم هذا الإعداد، يمكن تهيئة مقبس AF_UNIX واحد فقط في نظام الملفات أو FIFO واحد لوحدة المقبس. استخدم هذا الخيار لإدارة اسم مستعار واحد أو أكثر مرتبط رمزيًا لمقبس، مع ربط دورة حياتها معًا. لاحظ أنه إذا فشل إنشاء رابط رمزي، لا يعتبر هذا قاتلًا لوحدة المقبس، وقد تظل وحدة المقبس تبدأ. إذا عُين سلسلة فارغة، تُنفذ تعيين قائمة المسارات. المبدئي هو قائمة فارغة.

    أُضيف في الإصدارة 214.

FileDescriptorName=
    يعين اسمًا لجميع واصفات الملفات التي تغلفها وحدة المقبس هذه. هذا مفيد لمساعدة الخدمات المفعلة على تحديد واصفات ملفات محددة، إذا مُررت واصفات متعددة. يمكن للخدمات استخدام استدعاء sd_listen_fds_with_names(3) للحصول على الأسماء المهيأة لواصفات الملفات المستلمة. قد تحتوي الأسماء على أي حرف ASCII، ولكن يجب استبعاد أحرف التحكم و ":"، ويجب أن يكون الطول 255 حرفًا كحد أقصى. إذا لم يُستخدم هذا الإعداد، فإن اسم واصف الملف المبدئي هو اسم وحدة المقبس (بما في ذلك لاحقة .socket) عندما Accept=no، و "connection" بخلاف ذلك.

    أُضيف في الإصدارة 227.

TriggerLimitIntervalSec=، TriggerLimitBurst=
    يهيئ حدًا لعدد مرات تفعيل وحدة المقبس هذه ضمن فاصل زمني محدد. يمكن استخدام إعداد TriggerLimitIntervalSec= لتهيئة طول الفاصل الزمني بوحدات الوقت المعتادة "us" و "ms" و "s" و "min" و "h" و ... والمبدئي هو 2 ثانية (انظر systemd.time(7) للحصول على تفاصيل حول وحدات الوقت المختلفة المفهومة). يأخذ إعداد TriggerLimitBurst= قيمة عدد صحيح موجب ويحدد عدد التفعيلات المسموح بها لكل فاصل زمني، والمبدئي هو 200 لمقابس Accept=yes (وبالتالي يسمح مبدئيًا بـ 200 تفعيل لكل 2 ثانية)، و 20 بخلاف ذلك (20 تفعيل لكل 2 ثانية). اضبط أيًا منهما على 0 لتعطيل أي شكل من أشكال تحديد معدل التشغيل.

    إذا تُجوز الحد، توضع وحدة المقبس في وضع الفشل، ولن تكون قابلة للاتصال بعد الآن حتى إعادة التشغيل. لاحظ أن هذا الحد يُفرض قبل وضع تفعيل الخدمة في قائمة الانتظار.

    قارن مع PollLimitIntervalSec=/PollLimitBurst= الموضح أدناه، والذي ينفذ تباطؤًا مؤقتًا إذا غمرت حركة المرور الواردة وحدة المقبس، على عكس حالة الفشل الدائم التي ينتج عنها TriggerLimitIntervalSec=/TriggerLimitBurst=.

    أُضيف في الإصدارة 230.

PollLimitIntervalSec=, PollLimitBurst=
    يهيئ حدًا لعدد مرات النظر في أحداث الاستقصاء على واصفات الملفات الداعمة لوحدة المقبس هذه. هذا الزوج من الإعدادات مشابه لـ TriggerLimitIntervalSec=/TriggerLimitBurst= ولكن بدلاً من وضع حد (قاتل) على تردد التفعيل، يضع حدًا (عابرًا) على تردد الاستقصاء. بناء الجملة والنطاق المتوقعان للمعاملات متطابقان مع الخيارات المذكورة أعلاه، ويمكن تعطيلهما بنفس الطريقة.

    إذا تُجوز حد الاستقصاء، يُعطل الاستقصاء مؤقتًا عليه حتى تمر النافذة الزمنية المحددة. وبالتالي، يبطئ حد الاستقصاء محاولات الاتصال إذا تُجوزَ ، ولكن على عكس حد التشغيل، لن يتسبب في فشل دائم. إنها الآلية الموصى بها للتعامل مع محاولات رفض الخدمة من خلال فيض الحزم.

    يُفرض حد الاستقصاء لكل واصف ملف للاستماع عليه، على عكس حد التشغيل الذي يُفرض لوحدة المقبس بأكملها. هذا التمييز مهم لوحدات المقبس التي تستمع على واصفات ملفات متعددة (أي تحتوي على مقاطع ListenXYZ= متعددة).

    المبدئي لهذه الإعدادات هو 150 (في حالة Accept=yes) و 15 (بخلاف ذلك) حدث استقصاء لكل 2 ثانية. هذا أقل بكثير من القيم المبدئية لحد التشغيل (انظر أعلاه) ويعني أن حد الاستقصاء يجب أن يضمن عادةً عدم تجاوز حد التشغيل أبدًا، ما لم تُنفذ تهيئة أحدهما أو تعطيله.

    أُضيف في الإصدار 255.

DeferTrigger=
    يأخذ وسيطة منطقية، أو "patient". يمكن استخدامه فقط عندما Accept=no. إذا فُعّل، يُستخدم وضع الوظيفة "lenient" بدلاً من "replace" عند تشغيل الخدمة، مما يعني أن الوحدات التي تُفعل/تُشغل حاليًا والتي تتعارض مع الخدمة لن تُزعج/تُوقف. علاوة على ذلك، إذا كان هناك تعارض، ستنتظر وحدة المقبس حتى اكتمال قائمة انتظار الوظائف الحالية وربما تؤجل التفعيل بحلول ذلك الوقت. يمكن تهيئة حد أعلى للوقت الإجمالي للانتظار عبر DeferTriggerMaxSec=. إذا عُينه على yes، ستفشل وحدة المقبس إذا انتهت جميع الوظائف أو وصولت إلى المهلة ولكن التعارض لا يزال قائمًا. إذا كان patient، انتظر دائمًا حتى انقضاء DeferTriggerMaxSec=. المبدئي هو no.

    هذا الإعداد مفيد لا سيما إذا كان ينبغي لوحدة المقبس أن تظل نشطة عبر عمليات تبديل الجذر (switch-root) أو إعادة التشغيل الناعم (soft-reboot) في حين تُوقف الخدمة الملحّة.

    أُضيف في الإصدار 258.

DeferTriggerMaxSec=
    يضبط الحد الأقصى للوقت لتأجيل الإلحاح عند تفعيل DeferTrigger=. إذا تعذر تنشيط الخدمة خلال الوقت المحدد، فسيُعتبر المقبس فاشلاً ويُنهى. يأخذ قيمة عديمة الوحدة بالثواني، أو قيمة فترة زمنية مثل "5min 20s". مرر "0" أو "infinity" لتعطيل منطق مهلة الانتظار (المبدئي).

    أُضيف في الإصدار 258.

PassFileDescriptorsToExec=
    يأخذ معاملاً منطقياً. القيمة المبدئية هي الإيقاف. في حال تفعيله، تُمَرر واصفات الملفات التي أنشأتها وحدة المقبس إلى أوامر ExecStartPost= و ExecStopPre= و ExecStopPost= من وحدة المقبس. يمكن الوصول إلى واصفات الملفات الممررة باستخدام sd_listen_fds(3) كما لو أن الأوامر استُدعيت من وحدات الخدمة المرتبطة بها. لاحظ أن الأمر ExecStartPre= لا يمكنه الوصول إلى واصفات ملفات المقبس.

    أُضيف في الإصدار 256.

تحقق من systemd.unit(5)، و systemd.exec(5)، و systemd.kill(5) لمزيد من الإعدادات.

انظر أيضًا

systemd(1), systemctl(1), systemd-system.conf(5), systemd.unit(5), systemd.exec(5), systemd.kill(5), systemd.resource-control(5), systemd.service(5), systemd.directives(7), sd_listen_fds(3), sd_listen_fds_with_names(3)

للحصول على أوصاف أكثر تفصيلاً، انظر سلسلة "systemd للمطورين": تنشيط المقابس[5]، وتنشيط المقابس، الجزء الثاني[6]، وتحويل خدمات inetd[7]، وخدمات الإنترنت وحاويات نظام التشغيل المنشطة بالمقابس[8].

ملاحظات

1.  نظام ملفات وظائف USB (USB FunctionFS)
    https://docs.kernel.org/usb/functionfs.html

2.  RFC 3875
    https://datatracker.ietf.org/doc/html/rfc3875

3.  دليل TCP Keepalive
    http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/

4.  Smack
    https://docs.kernel.org/admin-guide/LSM/Smack.html

5.  تفعيل المقبس
    https://0pointer.de/blog/projects/socket-activation.html

6.  تفعيل المقبس، الجزء الثاني
    https://0pointer.de/blog/projects/socket-activation2.html

7.  تحويل خدمات inetd
    https://0pointer.de/blog/projects/inetd.html

8.  خدمات الإنترنت المُفعّلة بالمقبس وحاويات نظام التشغيل
    https://0pointer.de/blog/projects/socket-activated-containers.html

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com> و #

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.