Плутати про "/etc/init.d" та послуги в "/ lib / systemd / system"


15

Я абсолютно новий у світі Linux, тому вибачте за все, що я можу сказати.

Я намагаюся запустити DB DB на машині Debian 8.5. Коли я встановив пакет (попередньо побудований з percona.com), я помітив такі файли:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

Про /etc/init.d/mongod

Я розумію, що це називається (доки воно зареєстровано через update-rc.d) під час завантаження / в інших конкретних станах системи (не хочу отримувати технічних питань з цього приводу, я поглинаю багато інформації, і це здається менш важливим).

Це для мене прекрасно. Сценарій робить багато ініціалізації і, нарешті, запускає демон Монго. Здається, є "тригери" для запуску, зупинки, перезапуску тощо, і наскільки я розумію, я можу викликати їх sudo service mongod <action>.

Про /lib/systemd/system/mongod.service

Цей файл, схоже, робить те саме (тобто запускає mongo), але з меншою конфігурацією, лише один рядок у параметрі ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Наскільки я розумію, це може бути спровоковано sudo systemctl start mongod.

  • Я не розумію, називається це під час завантаження чи ні.

  • Я не розумію, чому потрібні два з цих "службових" файлів, і як я можу позбутися одного (можливо, одного в / lib / systemd, оскільки це набагато простіше).

  • Я не розумію, чи є стосунки між ними.

  • Я прочитав, що systemctlпрацює і за init.dсценаріями, і в цьому випадку я не розумію, який з двох файлів буде викликаний systemctl mongod start.

Я думаю, що є надмірність, і я повинен вибрати лише один із двох способів. І я хочу бути впевненим, що це так

  • викликається при завантаженні
  • викликається командою (наприклад, serviceабо systemctl).

Не могли б ви допомогти мені прояснити свою думку? За допомогою деяких коментарів я, мабуть, можу зосередити та звузити питання.

Відповіді:


12

Коли у вас є і init.dсценарій, і системний .serviceфайл з тим самим іменем, systemd буде використовувати сервісний файл для всіх операцій. Я вірю, що serviceкоманда просто перенаправить на systemd. Сценарій init.d буде ігнорований.

Використовуйте systemd. Це нове в Debian 8, але це за замовчуванням. Файли сервісних систем повинні виглядати простіше, ніж сценарії init.d. Ви не згадали якусь потрібну вам функцію, яка не підтримується системною службою.

Якщо файл служби не був включений, systemdіз задоволенням буде використовувати скрипт init.d. Тож розробник пакету mongod каже вам, що вони вважають, що це системне визначення краще :).

Подивіться на вихід systemctl status mongod. Якщо послугу ввімкнено для запуску під час завантаження, Loaded:рядок відображатиметься "увімкнено". Інакше можна використовувати systemctl enable mongod. Ви також можете включити варіант --now, і він буде запущений одночасно.


Дякую! Я збираюся вивчити systemd і врешті-решт використовувати його. Поки що я хотів відключити це і, нарешті, запустити сценарій init.d, над яким я працював. Я пішов systemctl disable mongod:; потім перейменовано на mongod.service в mongod-backup.service; то systemctl daemon-reload. Як ви вважаєте, це було правильно? Я читав, що ви не повинні змінювати файли в / lib / systemd / system /, але без перейменування systemctl продовжував ігнорувати скрипт init.d.
natario

Файли в / lib / systemd не є конфілерами. Я дійсно не можу порекомендувати встановити пакунок debian та змінити його файли (а пізніше оновити пакет). Натомість слід перейменувати скрипт init.d, над яким ви працювали (імовірно, змінюючи?). Сценарії init.d, як правило, є конфілерами. Якщо оновлення змінить конфіле (що не повинно бути жодних причин), воно спочатку попередить вас. У цьому випадку я очікую, що він повідомить вас, якщо оновлена ​​версія оригінального (фактично) видаленого сценарію init.d коли-небудь стане доступною.
sourcejedi

Можливо, вам потрібно буде додати залежність замовлення від вашої нової послуги до послуг, від яких залежало mongod. Також є ймовірність, що вам доведеться усунути деякі суворі залежності, але я б не вважав цього. Безпечний спосіб змінити постраждалі служби - скопіювати їх /etc/systemd/system/та змінити копію.
sourcejedi

Взагалі, я вважаю, що дотримуватися systemd простіше. Тепер ви вивчаєте функції bash, init-функцій та системи backd-compat. Оскільки ви не вивчаєте чисту систему init SysV, якщо ви коли-небудь користуєтесь такою системою, є ризик, що ви очікуєте функцій, які насправді походять від systemd.
sourcejedi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.