Для FreeBSD Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ систСмный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ rcd

Батист ДаруссСн (Baptiste Daroussin), Ρ‡Π»Π΅Π½ FreeBSD Core Team ΠΈ Π°Π²Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° pkg, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ систСмный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ для FreeBSD β€” rcd. БистСмный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ rcd вызываСтся init-процСссом вмСсто /etc/rc, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвисов (/etc/rcd.d/*.ucl), строит Π΄Π΅Ρ€Π΅Π²ΠΎ зависимостСй ΠΈ запускаСт сСрвисы ΠΏΠΎ возмоТности ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, послС Ρ‡Π΅Π³ΠΎ отслСТиваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвисов ΠΈ ΠΏΡ€ΠΈ нСобходимости ΠΈΡ… пСрСзапускаСт.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ процСссом ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с сСрвисами ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄ Π² UNIX-сокСт ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки rctl. Unit-Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ сСрвисов ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡŽΡ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UCL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ nginx ΠΈ bind с элСмСнтами для упрощСния Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, заимствованными ΠΈΠ· JSON. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания шаблонов Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… unit-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ написания встроСнных ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° языкС Lua. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ unit-Ρ„Π°ΠΉΠ»Π° для запуска nginx: name = Β«nginxΒ»; description = Β«Nginx HTTP ServerΒ»; type = Β«simpleΒ»; command = Β«/usr/local/sbin/nginxΒ»; command_args = Β«-g β€˜daemon off;'Β»; provides = [Β«nginxΒ», Β«httpΒ»]; requires = [Β«NETWORKINGΒ», Β«sshdΒ»]; restart { policy = Β«alwaysΒ»; max_retries = 10; delay = 2000; backoff = Β«linearΒ»; } process { user = Β«wwwΒ»; group = Β«wwwΒ»; cpuset = Β«0-3Β»; } rctl { memoryuse = { action = Β«denyΒ»; amount = Β«2gΒ»; }; pcpu = { action = Β«throttleΒ»; amount = Β«80Β»; }; }

ВмСсто Ρ€Π°Π±ΠΎΡ‚Ρ‹ с PID-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ отслСТиваниС активности Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… процСссов осущСствляСтся с использованиСм дСскрипторов, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… систСмным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ pdfork(). Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ сСрвисов Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ сСтСвому сокСту ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π²Π°ΠΆΠ½Ρ‹Ρ… сСрвисов ΠΎΡ‚ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π² случаС Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти Π² систСмС. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ вСрсии Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ процСсса rcd Π½Π° Π»Π΅Ρ‚Ρƒ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ состояния.

Для ограничСния доступных сСрвису рСсурсов примСняСтся rctl, Π° для ΠΏΠΎΠ»Π½ΠΎΠΉ изоляции сСрвисов поддСрТиваСтся ΠΈΡ… запуск Π² jail-окруТСниях. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° настройка доступа ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌΡƒ UNIX-сокСту Π² привязкС ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ сСрвисам. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² спящий Ρ€Π΅ΠΆΠΈΠΌ.

БистСмный ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстим с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ систСмой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ запуска сСрвисов rc.d ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· измСнСния ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ rc.d-скриптов ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Достаточно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ rcd Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ систСму ΠΈ послС пСрСзапуска всё ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ сокращСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π·Π° счёт распаралСлливания запуска сСрвисов. Подобная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ упростит ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ систСм Π½Π° rcd ΠΈ даст Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ постСпСнно ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ unit-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ rc.d-скрипты.

Для совмСстимости с rc.d поддСрТиваСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ unit-ΠΎΠ² Β«legacyΒ». Rcd сканируСт содСрТимоС /etc/rc.d/ ΠΈ /usr/local/etc/rc.d/, Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ PROVIDE/REQUIRE/BEFORE/KEYWORD Π² скриптах, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ настройки rc.conf ΠΈ опрСдСляСт состояниС запуска скриптов, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ скрипт ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ legacy unit. Π’ случаС использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rcctl для управлСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ unit-Π°ΠΌΠΈ, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² старый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Β«rcctl reload sshdΒ» ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ запуску Β«/etc/rc.d/sshd reloadΒ».

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры | ProHoster