
FAST Inter لأنظمة Linux. عكس هندسة من EEEPC fastinit من قبل كلاوديو ماتسوكا - "فجوات مليئة بالضفدع DNA ..."

الشكل 1: لقطة شاشة من Linux التمهيد التقييدي (Howto).
تشمل الميزات:
/etc/rc.local/etc/network/interfacesinitctl topsulogin مجمعة لقذيفة الصيانة المحميةsyslogd ، راجع مشروع SysklogD الموصى به لتكامل التسجيل الكامل وكيفية تسجيل الدخول إلى المخزن المؤقت لحلقة kernel من البرامج النصية باستخدام loggerينصب التركيز على الأنظمة الصغيرة والمدمجة ، على الرغم من أن Finit يمكن استخدامه بالكامل على أنظمة الخادم وسطح المكتب أيضًا. للاطلاع على أمثلة العمل ، راجع القسم/ القسم مع البرامج التعليمية لتوزيعات Linux التالية:
ملاحظة: لا يعني دعم توزيعات Linux المختلفة التثبيت المصلحة بسهولة على جميع البنى. تعد البرامج النصية للتثبيت المجمعة أمثلة للتثبيتات القياسية ، التي تم اختبارها على أنظمة AMD64 (x86_64). يمكن العثور على الإعدادات المخصصة ، على سبيل المثال ، للأنظمة المدمجة ، في أي من الأمثلة التالية القائمة على Buildroot: Mylinux أو Infix أو Plain Br2-Finit-Demo.
يمكن أيضًا تقسيم هذا المثال /etc/finit.conf في ملفات .conf متعددة في /etc/finit.d . متاح ، ولكن لم يتم تمكينه بعد ، يمكن وضع الخدمات في /etc/finit.d/available وتمكينها بواسطة مشغل باستخدام أداة initctl. انظر توزيعات Linux المذكورة أعلاه ، أو Mylinux.
ملاحظة: اعتبارًا من Finit v4.4 ، يمكن تفكيك خطوط .conf باستخدام حرف استمرار UNIX القياسي (
) ، وأيضًا يتم دعم التعليقات الخلفية. هذا الأخير يعني أنك بحاجة إلى الهروب من أي تجزئة تستخدم في التوجيهات والأوصاف (#). لمعرفة المزيد عن هذا وأمثلة ، راجع دليل Finit.conf (5) أو Doc/Config.md.
# Fallback if /etc/hostname is missing
host default
# Runlevel to start after bootstrap, 'S', default: 2
# runlevel 2
# Support for setting global environment variables, using foo=bar syntax
# be careful though with variables like PATH, SHELL, LOGNAME, etc.
# PATH=/usr/bin:/bin:/usr/sbin:/sbin
# Max file size for each log file: 100 kiB, rotate max 4 copies:
# log => log.1 => log.2.gz => log.3.gz => log.4.gz
log size=100k count=4
# Services to be monitored and respawned as needed
service [S12345] env:-/etc/conf.d/watchdog watchdog $WATCHDOG_OPTS $WATCHDOG_DEV -- System watchdog daemon
service [S12345] env:-/etc/conf.d/syslog syslogd -n $SYSLOGD_OPTS -- System log daemon
service [S12345] < pid /syslogd> env:-/etc/conf.d/klogd klogd -n $KLOGD_OPTS -- Kernel log daemon
service [2345] env:-/etc/conf.d/lldpd lldpd -d $LLDPD_OPTS -- LLDP daemon (IEEE 802.1ab)
# The BusyBox ntpd does not use syslog when running in the foreground
# So we use this trick to redirect stdout/stderr to a log file. The
# log file is rotated with the above settings. The condition declares
# a dependency on a system default route (gateway) to be set. A single
# <!> at the beginning means ntpd does not respect SIGHUP for restart.
service [2345] log:/var/log/ntpd.log <!net/route/default> ntpd -n -l -I eth0 -- NTP daemon
# For multiple instances of the same service, add :ID somewhere between
# the service/run/task keyword and the command.
service :80 [2345] merecat -n -p 80 /var/www -- Web server
service :8080 [2345] merecat -n -p 8080 /var/www -- Old web server
# Alternative method instead of below runparts, can also use /etc/rc.local
# sysv [S] /etc/init.d/keyboard-setup -- Setting up preliminary keymap
# sysv [S] /etc/init.d/acpid -- Starting ACPI Daemon
# task [S] /etc/init.d/kbd -- Preparing console
# Hidden from boot progress, using empty `--` description
# sysv [S] /etc/init.d/keyboard-setup --
# sysv [S] /etc/init.d/acpid --
# task [S] /etc/init.d/kbd --
# Run start scripts from this directory
# runparts /etc/start.d
# Virtual consoles run BusyBox getty, keep kernel default speed
tty [12345] /sbin/getty -L 0 /dev/tty1 linux nowait noclear
tty [2345] /sbin/getty -L 0 /dev/tty2 linux nowait noclear
tty [2345] /sbin/getty -L 0 /dev/tty3 linux nowait noclear
# Use built-in getty for serial port and USB serial
# tty [12345] /dev/ttyAMA0 noclear nowait
# tty [12345] /dev/ttyUSB0 noclear
# Just give me a shell, I need to debug this embedded system!
# tty [12345] console noclear nologin يتم وصف service Stanza ، وكذلك task ، run وغيرها بالكامل في Doc/Config.md. فيما يلي نظرة عامة سريعة على بعض المكونات الأكثر شيوعًا اللازمة لبدء برنامج Unix Daemon:
service [LVLS] <COND> log env:[-]/etc/default/daemon daemon ARGS -- Daemon daemon
^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | `---------- Optional description
| | | | | | `------------------ Daemon arguments
| | | | | `------------------------- Path to daemon
| | | | `---------------------------------------------------- Optional env. file
| | | `-------------------------------------------------------- Redirect output to log
| | `--------------------------------------------------------------- Optional conditions
| `---------------------------------------------------------------------- Optional Runlevels
`------------------------------------------------------------------------------ Monitored application
بعض المكونات اختيارية: المستوى (S) ، الحالة (الشرطات) والوصف ، مما يجعل من السهل إنشاء برامج نصية بسيطة البدء وما زالت ممكنة لاستخدامات أكثر تقدمًا أيضًا:
service /usr/sbin/sshd -D
يتم التعامل مع التبعيات باستخدام الظروف. أحد أكثر الشروط شيوعًا هو انتظار أن تصبح الشبكات الأساسية متاحة:
service <net/route/default> nginx -- High performance HTTP server
فيما يلي مثال آخر حيث نرشد Finit بعدم بدء تشغيل ntpd Busybox حتى يبدأ syslogd بشكل صحيح. Finit تنتظر syslogd لإنشاء ملف PID الخاص به ، بشكل افتراضي /var/run/syslogd.pid run/syslogd.pid.
service [2345] log <!pid/syslogd> ntpd -n -N -p pool.ntp.org
service [S12345] syslogd -n -- Syslog daemon
لاحظ الكلمة الأساسية log ، يستخدم Busybox ntpd stderr للتسجيل عند التشغيل في المقدمة. مع log Finit يعيد توجيه stdout + stderr إلى البرنامج الخفي لسجل النظام باستخدام أداة logger(1) .
يمكن أن تحتوي الخدمة ، أو المهمة ، على تبعيات متعددة مدرجة. هنا ننتظر أن يبدأ كلا syslogd وشبكات الشبكات الأساسية:
service [2345] log <pid/syslogd,net/route/default> ntpd -n -N -p pool.ntp.org
في حالة فشل أي شرطين ، على سبيل المثال ، يتم إيقاف ntpd ، وبمجرد أن يعود مرة أخرى ، تتم إعادة تشغيل ntpd تلقائيًا.
ملاحظة: تأكد من أن الشياطين لا تتطرق إلى أنفسهم وينفصلون عن tty المسيطر ، وعادة ما يكون علامة -n أو -f ، أو -D كما في حالة Openssh أعلاه. إذا انفصل عن نفسه ، فلا يمكن لفيلم مراقبته وسيحاول بدلاً من ذلك إعادة تشغيله.
الإشراف على العملية
ابدأ ومراقبة وإعادة تشغيل الخدمات في حالة فشلها.
غيتي
تدعم Finit Getty الخارجية ولكنها تأتي أيضًا مع getty مدمجة محدودة ، مفيدة للأنظمة الصغيرة حقًا. تقوم Getty بإعداد Tty وينتظر إدخال المستخدم قبل تسليم /bin/login ، وهو المسؤول عن التعامل مع المصادقة الفعلية.
tty [12345] /dev/tty1 nowait linux
tty [12345] /dev/ttyAMA0 noclear vt100
tty [12345] /sbin/getty -L /dev/ttyAMA0 vt100
قد يرغب مستخدمو الأنظمة المدمجة في تمكين وحدة التحكم التسلسلية التلقائية مع جهاز @console الخاص. يعمل هذا بغض النظر عن الطقس ، يستخدم النظام ttyS0 أو ttyAMA0 أو ttyMXC0 أو أي شيء آخر. أرقام التقييد من خلال الاستعلام عن sysfs: /sys/class/tty/console/active .
tty [12345] @console linux noclear
لاحظ أعلام noclear الاختيارية ، nowait ، و nologin . هذا الأخير هو تخطي عملية تسجيل الدخول بالكامل. لمزيد من المعلومات ، راجع Doc/Config.md.
المستويات
يتوفر دعم SYSV init-style Runlevels ، بنفس النمط الأدنى مثل كل شيء آخر في Finit. يمكن تطبيق بناء الجملة [2345] على الخدمة والمهمة والتشغيل و tty stanzas.
المستويات العريضة المحجوزة هي 0 و 6 ، توقف وإعادة التشغيل ، على التوالي تمامًا مثل SYSV init. يمكن تكوين RunLevel 1 بحرية ، ولكن يوصى بالاحتفاظ به حيث أن المستشفى المفرد للمستخدم المفرد لأن Finit لن يبدأ الشبكات هنا. إن runlevel NUM المكونة من /etc/finit.conf هو ما يتغير المطلع على بعد bootstrap ، ما لم يتم تقديم "Single" (أو 'S') على خط kernel cmdline ، وفي هذه الحالة يتم بدء تشغيل Runlevel 1.
يتم بدء جميع الخدمات في Runlevel S) في المرتبة الأولى ، تليها مستشفى وقت التشغيل المطلوب. يمكن بدء تشغيل المهام في Runlevel S بالتسلسل باستخدام run [S] cmd . يتم تغيير المستويات العريضة في وقت التشغيل مثل أي init آخر ، على سبيل المثال init 4 ، ولكن أيضًا باستخدام أداة intictl الأكثر تقدماً.
شروط
كما ذكرنا سابقًا ، لدى Finit نظام تبعية متقدم للتعامل مع التزامن ، يسمى الشروط. يمكن استخدامه بعدة طرق. تعتمد على خدمة أخرى ، وتوافر الشبكة ، وما إلى ذلك.
أحد الأمثلة الرائعة المفيدة حقًا للأنظمة المدمجة هو تشغيل نصوص معينة إذا كانت اللوحة تحتوي على ميزة معينة مشفرة في شجرة أجهزتها. في Bootstrap ندير البرنامج النصي ident التالي:
#! /bin/sh
conddir=/var/run/finit/cond/hw/model
dtmodel=/sys/firmware/devicetree/base/model
if ! test -e $dtmodel ; then
exit 0
fi
model= $( cat $dtmodel | tr " [A-Z] " " [a-z]- " )
mkdir -p $conddir && ln -s ../../reconf $conddir / $model شريطة وجود عقدة شجرة الجهاز ، وهي سلسلة ، يمكننا بعد ذلك استخدام الشرط <hw/model/foo> عند بدء البرامج النصية الأخرى. هنا مثال:
run [S] /path/to/ident --
task [2] <hw/model/foo> /path/to/foo-init -- Initializing Foo board
لاحظ الحيلة مع وصف فارغ لإخفاء المكالمة إلى
identفي إخراج التقدم المصلحة.
الإضافات
يمكن للمكونات الإضافية تمديد وظائف التقييد والربط في المراحل المختلفة من عملية التمهيد وفي وقت التشغيل. تتم كتابة الإضافات في C وتجميعها في مكتبة ديناميكية يتم تحميلها تلقائيًا عن طريق التقييد عند التمهيد. يتم تجميع مجموعة أساسية من الإضافات في plugins/ الدليل.
القدرات:
تتوفر الإضافات والوظائف غير المرتبطة بحتة بما يحتاجه /sbin/init لبدء نظام ما كمجموعة من الإضافات التي إما ربط عملية التمهيد أو الاستجابة لمختلف الإدخال/الإخراج.
لمزيد من المعلومات ، راجع Doc/Plugins.MD.
إعادة التحميل التلقائي
افتراضيًا ، شاشات Finit /etc/finit.d/ و /etc/finit.d/enabled/ تسجيل أي تغييرات على ملفات .conf . لتنشيط تغيير ، يجب على المستخدم استدعاء initctl reload ، والتي تعيد تحميل جميع الملفات المعدلة ، وتوقف أي خدمات تمت إزالتها ، ويبدأ تشغيلها الجديد ، وإعادة تشغيل أي منها معدلة. إذا تغيرت وسيطات سطر الأوامر للخدمة ، فسيتم إنهاء العملية ثم تبدأ مرة أخرى مع الوسائط المحدثة. إذا لم يتم تعديل الحجج ودعم العملية تنهد ، فستتلقى العملية تنهدًا بدلاً من إنهاء وبدء.
بالنسبة لبعض حالات الاستخدام ، تخلق خطوة الإضافية المتمثلة في استدعاء initctl reload النفقات العامة غير الضرورية ، والتي يمكن إزالتها في وقت البناء باستخدام:
configure --enable-auto-reload
cgroups
تدعم Finit Cgroups V2 وتأتي مع المجموعات الافتراضية التالية التي يتم فيها وضع الخدمات وجلسات المستخدم في:
/sys/fs/cgroup
|-- init/ # cpu.weight:100
|-- system/ # cpu.weight:9800
`-- user/ # cpu.weight:100
تم وضع Finit نفسها وبرامج النصوص والخدمات المساعد في مجموعة أوراق الأوراق العليا init/ ، والتي تم حجزها أيضًا.
يتم وضع جميع عمليات التشغيل/المهمة/الخدمة/SYSV في المجموعة الفرعية الخاصة بها في system/ . يتم أخذ اسم كل مجموعة فرعية من ملف .conf من /etc/finit.d .
يتم وضع جميع عمليات getty/ tty في مجموعة فرعية خاصة بها في user/ . اسم كل مجموعة فرعية مأخوذة من اسم المستخدم.
مجموعة رابعة موجودة أيضا ، مجموعة root . كما أنه مخصص ومقصود في المقام الأول لمهام RT. إذا كان لديك مهام RT ، فيجب أن يتم الإعلان عنها على هذا النحو في خدمتهم المقطع مثل هذا:
service [...] <...> cgroup.root /path/to/foo args -- description
أو
cgroup.root
service [...] <...> /path/to/foo args -- description
service [...] <...> /path/to/bar args -- description
راجع Doc/Config.md لمزيد من المعلومات ، على سبيل المثال ، كيفية تكوين حدود المجموعات.
تحتوي أداة initctl على ثلاثة أوامر للمساعدة في تصحيح وتحسين إعداد ومراقبة مجموعات Cgroups. انظر أوامر ps و top و cgroup للحصول على التفاصيل.
ملاحظة: يتم اكتشاف الأنظمة التي لا تدعم Cgroups ، وتحديداً الإصدار 2 ، تلقائيًا. على مثل هذه الأنظمة ، يتم تعطيل الوظيفة أعلاه في وقت مبكر في التمهيد.
في نهاية التمهيد ، عندما تبدأ جميع مهام وخدمات Bootstrap ( S ) ، ولكن ليس الشبكات ، فإن Finit يستدعي أمره المدمج (8) على أي دليل runparts <DIR> . يحدث هذا قبل التغيير مباشرة إلى Runlevel المكونة (الافتراضي 2). (يتم تمكين الشبكات مباشرة قبل التغيير من وضع المستخدم الفردي.)
runparts /etc/rc.d/ مباشرة بعد تغيير المستوى عندما تبدأ جميع الخدمات بشكل صحيح ، يتم استدعاء /etc/rc.local .
لا يوجد أي تكوين stanza في /etc/finit.conf مطلوب لـ rc.local . إذا كان موجودًا وهو نصي SHELL القابل للتنفيذ ، فإنه يدعوها إلى نهاية التمهيد ، قبل استدعاء HOOK_SYSTEM_UP . شاهد المزيد على السنانير في doc/plugins.md.
لا يمكن استدعاء Finit عبر الإشارات أو استخدام initctl في أي برنامج نصي أو /etc/rc.local . هذا لأن التغذية ذات الخيوط الفردية وتستدعي هذه البرامج النصية بطريقة منعشة في نهاية Runlevel S ، وفي هذه النقطة لم تبدأ حلقة الحدث بعد.
حلقة الحدث هي كل شيء تم تصميمه حوله ، باستثناء Runlevel S ، والذي لا يزال موكبًا بطيئًا من خلال الكثير من الإعداد ، مع وجود عدد قليل من السنانير وحظر النداءات على البرامج النصية الخارجية.
ومع ذلك ، لا يتم حظر جميع أوامر initctl . الأوامر المدعومة:
inictl cond : تشغيل الملفات فقط في /run/finit/condinitctl enable/disable : يتم تنشيط Run/Task/Service الممكّن على تغيير المستوى من S إلى 2initctl touch/show/create/delete/list : create ، شريطة استخدام الوضع غير التفاعلي ، مرة أخرى تسري التغييرات في تغيير المستشفى مباشرة بعد bootstrapinitctl -f reboot/poweroff/halt : شريطة استخدام علامة -f لإجبار أوامر kernel المباشرة مثال: يمكنك تعيين usr/ ظروف في /etc/rc.local وأن يكون لديك خدمة/مهمة في Runlevel 2 تعتمد عليها للتنفيذ.
يتم تضمين الدعم الأساسي للمستفيدين من V1.8. بشكل افتراضي ، جميع الخدمات والمهام والأوامر تشغيل و Ttys المدرجة بدون مجموعة من المستويات العريضة تحصل على مجموعة افتراضية [234] . المستوى الافتراضي بعد التمهيد هو 2.
تدعم Finit Runlevels 0-9 ، و S ، مع 0 محفوظة ل HALT ، 6 إعادة تشغيل و S للخدمات لتشغيل فقط في bootstrap. Runlevel 1 هو مستوى المستخدم الفردي ، حيث لا يتم تمكين الشبكات عادة. في التقييم ، هذه سياسة لمستخدمها. عادةً ما يتم استخدام المستويات العريضة فقط 1-6 ، وأكثر شيوعًا ، يتم استخدام المستشفى الافتراضي فقط.
لتحديد مجموعة مسموح بها من المستويات العريضة service أو الأمر run أو task أو tty ، أضف [NNN] إلى /etc/finit.conf ، مثل هذا:
service [S12345] syslogd -n -x -- System log daemon
run [S] /etc/init.d/acpid start -- Starting ACPI Daemon
task [S] /etc/init.d/kbd start -- Preparing console
service [S12345] <pid/syslogd> klogd -n -x -- Kernel log daemon
tty [12345] /dev/tty1
tty [2] /dev/tty2
tty [2] /dev/tty3
tty [2] /dev/tty4
tty [2] /dev/tty5
tty [2] /dev/tty6
في هذا المثال ، يتم تشغيل syslogd لأول مرة ، بالتوازي ، ثم يتم استدعاء ACPID باستخدام البرنامج النصي SYSV init التقليدي. يتم استدعاؤه باستخدام أمر Run ، مما يعني أن الأمر Task التالي لبدء برنامج KBD لا يتم استدعاءه حتى يكتمل برنامج ACPID init بالكامل. ثم يتم استدعاء البرنامج النصي إعداد لوحة المفاتيح بالتوازي مع KLOGD كخدمة مراقبة.
مرة أخرى ، يتم بدء المهام والخدمات بالتوازي ، في حين يتم استدعاء أوامر التشغيل بالترتيب المدرج ولا يتم تشغيل الأوامر اللاحقة حتى يكتمل الأمر Run. أيضًا ، يتم تشغيل أوامر المهمة والتشغيل في غلاف ، بحيث يمكن استخدام الأنابيب وإعادة التوجيه.
الأمثلة التالية توضح هذا. تتم إزالة مهمة BootStrap وأوامر التشغيل أيضًا عند الانتهاء منها ، ولن يدرجها initctl show .
task [S] echo "foo" | cat >/tmp/bar
run [S] echo "$HOME" >/tmp/secret
يمكن إجراء التبديل بين المستويات العريضة عن طريق استدعاء init مع وسيطة واحدة ، على سبيل المثال init 5 ، أو باستخدام initctl runlevel 5 ، كلاهما يتحول إلى Runlevel 5. عند تغيير FiniT Runleit أيضًا إعادة تحميل جميع ملفات .conf في الدليل /etc/finit.d/ . لذا ، إذا كنت ترغب في تعيين تكوين نظام جديد ، فقم بالتبديل إلى Runlevel 1 ، وقم بتغيير جميع ملفات التكوين في النظام ، ولمس جميع ملفات .conf في /etc/finit.d قبل العودة إلى المستشفى السابق مرة أخرى - وبهذه الطريقة يمكن أن تتوقف كل من الخدمات القديمة وبدء أي منها جديد ، دون إعادة تشغيل النظام.
تقليديًا ، يتم إعادة تشغيل وتوقف نظام UNIX عن طريق تغيير مستويته. تأتي Finit مع توفير أدواتها الخاصة: shutdown ، reboot ، poweroff ، suspend ، ولكن أيضًا أداة initctl ، مفصلة في القسم التالي.
لأسباب التوافق ، تستمع Finit إلى نفس مجموعة إشارات Implox Box Init. هذا لا يتوافق بنسبة 100 ٪ مع SYSV init ، ولكن من الواضح أن التركيبة الأكثر شيوعا للناشئ. لمزيد من التفاصيل ، راجع Doc/Signals.MD.
تقوم Finit أيضًا بتنفيذ واجهة برمجة التطبيقات الحديثة للاستعلام ، وخدمات البدء/الإيقاف ، والتي تسمى initctl . على عكس telinit لا تعود أداة initctl حتى يتم الانتهاء من الأمر المحدد بالكامل.
Usage: initctl [OPTIONS] [COMMAND]
Options:
-b, --batch Batch mode, no screen size probing
-c, --create Create missing paths (and files) as needed
-f, --force Ignore missing files and arguments, never prompt
-h, --help This help text
-j, --json JSON output in 'status' and 'cond' commands
-1, --once Only one lap in commands like 'top'
-p, --plain Use plain table headings, no ctrl chars
-q, --quiet Silent, only return status of command
-t, --no-heading Skip table headings
-v, --verbose Verbose output
-V, --version Show program version
Commands:
debug Toggle Finit (daemon) debug
help This help text
version Show program version
ls | list List all .conf in /etc/finit.d
create <CONF> Create .conf in /etc/finit.d/available
delete <CONF> Delete .conf in /etc/finit.d/available
show <CONF> Show .conf in /etc/finit.d/available
edit <CONF> Edit .conf in /etc/finit.d/available
touch <CONF> Change .conf in /etc/finit.d/available
enable <CONF> Enable .conf in /etc/finit.d/available
disable <CONF> Disable .conf in /etc/finit.d/enabled
reload Reload *.conf in /etc/finit.d (activate changes)
cond set <COND> Set (assert) user-defined conditions +usr/COND
cond get <COND> Get status of user-defined condition, see $? and -v
cond clear <COND> Clear (deassert) user-defined conditions -usr/COND
cond status Show condition status, default cond command
cond dump [TYPE] Dump all, or a type of, conditions and their status
log [NAME] Show ten last Finit, or NAME, messages from syslog
start <NAME>[:ID] Start service by name, with optional ID
stop <NAME>[:ID] Stop/Pause a running service by name
reload <NAME>[:ID] Reload service as if .conf changed (SIGHUP or restart)
This allows restart of run/tasks that have already run
Note: Finit .conf file(s) are *not* reloaded!
restart <NAME>[:ID] Restart (stop/start) service by name
signal <NAME>[:ID] <S> Send signal S to service by name, with optional ID
ident [NAME] Show matching identities for NAME, or all
status <NAME>[:ID] Show service status, by name
status Show status of services, default command
cgroup List cgroup config overview
ps List processes based on cgroups
top Show top-like listing based on cgroups
plugins List installed plugins
runlevel [0-9] Show or set runlevel: 0 halt, 6 reboot
reboot Reboot system
halt Halt system
poweroff Halt and power off system
suspend Suspend system
utmp show Raw dump of UTMP/WTMP db
بالنسبة للخدمات التي لا تدعم SIGHUP <!> يجب استخدام التدوين في ملف .conf لإخبار Finit بالتوقف وبدء تغييره عند reload runlevel . إذا كان <> يحتوي على المزيد من الشروط ، فسيؤثر هذه أيضًا على كيفية الحفاظ على الخدمة.
ملاحظة: على الرغم من أنه من الممكن أن تبدأ الخدمات التي لا تنتمي إلى المستشفى الحالي ، فإن هذه الخدمات لن يتم استنباطها تلقائيًا عن طريق التغذية إذا خرجت (تعطل). وبالتالي ، إذا كان المستشفى هو 2 ، فلن تتم إعادة تشغيل خدمة Dropbear SSH أدناه إذا تم قتلها أو مخرجها.
أمر status هو الافتراضي ، ويعرض نظرة عامة سريعة على جميع عمليات التشغيل/المهمة/الخدمات التي يتم مراقبتها. هنا نسمي initctl -p ، مناسبة للبرمجة النصية والتوثيق:
alpine:~# initctl -p
PID IDENT STATUS RUNLEVELS DESCRIPTION
======================================================================
1506 acpid running [---2345----] ACPI daemon
1509 crond running [---2345----] Cron daemon
1489 dropbear running [---2345----] Dropbear SSH daemon
1511 klogd running [S-12345----] Kernel log daemon
1512 ntpd running [---2345----] NTP daemon
1473 syslogd running [S-12345----] Syslog daemon
alpine:~# initctl -pv
PID IDENT STATUS RUNLEVELS COMMAND
======================================================================
1506 acpid running [---2345----] acpid -f
1509 crond running [---2345----] crond -f -S $CRON_OPTS
1489 dropbear running [---2345----] dropbear -R -F $DROPBEAR_OPTS
1511 klogd running [S-12345----] klogd -n $KLOGD_OPTS
1512 ntpd running [---2345----] ntpd -n $NTPD_OPTS
1473 syslogd running [S-12345----] syslogd -n
تتم قراءة متغيرات البيئة لكل من الخدمات أعلاه ، في حالة Alpine Linux ، /etc/conf.d/ . قد تحتوي التوزيعات الأخرى على أدلة أخرى ، على سبيل المثال ، استخدام Debian /etc/default/ .
يأخذ أمر status NAME:ID . هنا نتحقق من حالة dropbear ، والتي لديها مثيل واحد فقط في هذا النظام:
alpine:~# initctl -p status dropbear
Status : running
Identity : dropbear
Description : Dropbear SSH daemon
Origin : /etc/finit.d/enabled/dropbear.conf
Environment : -/etc/conf.d/dropbear
Condition(s):
Command : dropbear -R -F $DROPBEAR_OPTS
PID file : !/run/dropbear.pid
PID : 1485
User : root
Group : root
Uptime : 2 hour 46 min 56 sec
Runlevels : [---2345----]
Memory : 1.2M
CGroup : /system/dropbear cpu 0 [100, max] mem [--.--, max]
|- 1485 dropbear -R -F
|- 2634 dropbear -R -F
|- 2635 ash
`- 2652 initctl -p status dropbear
Apr 8 12:19:49 alpine authpriv.info dropbear[1485]: Not backgrounding
Apr 8 12:37:45 alpine authpriv.info dropbear[2300]: Child connection from 192.168.121.1:47834
Apr 8 12:37:46 alpine authpriv.notice dropbear[2300]: Password auth succeeded for 'root' from 192.168.121.1:47834
Apr 8 12:37:46 alpine authpriv.info dropbear[2300]: Exit (root) from <192.168.121.1:47834>: Disconnect received
Apr 8 15:02:11 alpine authpriv.info dropbear[2634]: Child connection from 192.168.121.1:48576
Apr 8 15:02:12 alpine authpriv.notice dropbear[2634]: Password auth succeeded for 'root' from 192.168.121.1:48576
Finit قادر على التشغيل على كل من أنظمة سطح المكتب/الخادم مع أنظمة UDEV والأنظمة المدمجة التي عادة ما تأتي مع MDEV Busybox. تحتوي بعض الأنظمة على Systemd-Udev أو Eudev اليوم بدلاً من UDEV الأصلي ، وقياسها التقييدي لجميعها في وقت التشغيل وتتوقع /dev/ أن يكون نظام ملفات قابل للكتابة باستخدام devtmpfs . من الممكن أيضًا التشغيل على إعداد /dev بشكل ثابت إذا لزم الأمر. ومع ذلك ، فليس من الجيد تثبيت كل من UDEV و MDEV في نفس الوقت ، وهذا سيؤدي إلى نتائج غير متوقعة.
في Boot Finit Finit إما mdev أو udevd للاستعداد /dev ، يتم ذلك بشكل مختلف قليلاً وعلى الأنظمة التي تحتوي على UDEV ، قد ترغب في إضافة مهمة واحدة التالية في وقت مبكر في /etc/finit.conf :
run [S] udevadm settle --timeout=120 -- Waiting for udev
يحتوي Finit على getty مدمج لـ Ttys ، ولكنه يتطلب عملًا /bin/login أو /bin/sh ، إذا لم يتم تكوين ttys في /etc/finit.conf .
بالنسبة لنظام /var التشغيلي بالكامل ، يجب إعداد /run و /tmp بشكل صحيح في /etc/fstab - والذي يتم تكراره عند التمهيد.
يعتمد هذا المشروع على التغذية الأصلية التي كتبها كلاوديو ماتسوكا والتي تم تصميمها عكسيًا من Syscalls of EEEPC Fastinit - "فجوات مليئة بالضفدع DNA ..."
تم تطوير وصيانة Finit بواسطة Joachim Wiberg في Github. يرجى تقديم تقارير الأخطاء ، أو استنساخها ، أو إرسال طلبات سحب لإصلاحات الأخطاء والإضافات المقترحة.