Як увімкнути або вимкнути послуги?


821

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

Перший знайдений нами спосіб - update-rc.dдодати нові сервіси до запуску, які спрямовані на /etc/init.dпапку та її вміст.

Інший, який я знайшов - це редагувати .confфайли в /etc/initпапці.

Який рекомендований спосіб увімкнути / відключити / додати послуги та чому?

Чи можете ви надати короткий покроковий приклад про те, як додати службу в Ubuntu та ввімкнути та вимкнути її?


1
Для роботи в мережі: дивіться: askubuntu.com/questions/230698/…
Хорхе Кастро

Це було б корисно для тих, хто затримався на Fedora 12 та приземлився тут. У випадку, якщо chkconfigви шукаєте linkrot .
Кровотечі пальцями

3
Зауважте, що відповідь на Ubuntu 14.04 тут все ще відсутня.
Reinier Post

2
@MarcelloNuccio: Починаючи з Ubuntu 15.04, Upstart був застарілим на користь Systemd.
Дан Даскалеску

Програми автоматичного запуску налаштовуються в autostartманіфестах або у *.serviceфайлах у кількох місцях, а також у init.dабо crontab. Дивіться: unix.stackexchange.com/a/525845/43233
Ноам Манос

Відповіді:


831

Є сервіси, які можна вмикати / вимикати за допомогою GUI (наприклад, startupдодаток) або терміналу.

Для Терміналу у вас є кілька варіантів. Спочатку відкрийте термінал (наприклад, введіть "термінал" у тире та відкрийте його). Тоді:

Тимчасове включення / вимкнення послуг

Для зупинки і запуску служб тимчасово (Не включити / відключити їх для майбутніх чобіт), ви можете набрати service SERVICE_NAME. Наприклад:

  • sudo service apache2 stop(Буде зупиняти послугу Apache до перезавантаження або поки не запустити її знову).

  • sudo service apache2 start( Почне запускати послугу Apache, припускаючи, що вона була зупинена раніше.)

  • service apache2 status (Скаже вам СТАТУС служби, якщо вона включена / запущена відключена / НЕ працює.)

  • sudo service apache2 restart(Буде РЕСТАРТАЙТЕ послугу. Найчастіше це використовується при зміні, конфігураційного файлу. У цьому випадку, якщо ви змінили або конфігурацію PHP, або конфігурацію Apache. Перезапуск позбавить вас від необхідності зупиняти / починати з 2 командних рядків )

  • service apache2(У цьому випадку, оскільки ви не згадали про дію, яку потрібно виконати для послуги, вона покаже вам всі варіанти, доступні для цієї конкретної послуги.) Цей аспект змінюється залежно від послуги, наприклад, для MySQL було б лише згадати, що це відсутній параметр. Для інших сервісів, таких як мережевий сервіс, він зазначає невеликий перелік усіх доступних варіантів.


СИСТЕМА

Починаючи з Ubuntu 15.04, Upstart буде застарілим на користь Systemd. З Systemd для управління послугами ми можемо зробити наступне:

systemctl start SERVICE- Використовуйте його для запуску послуги. Не зберігається після перезавантаження

systemctl stop SERVICE- Використовуйте його, щоб зупинити послугу. Не зберігається після перезавантаження

systemctl restart SERVICE - Використовуйте його для перезапуску послуги

systemctl reload SERVICE - Якщо служба його підтримує, вона перезавантажить файли конфігу, пов'язані з нею, не припиняючи жодного процесу, що використовує послугу.

systemctl status SERVICE- Показує статус послуги. Показує, чи працює служба наразі.

systemctl enable SERVICE- Увімкнення послуги при наступному перезавантаженні або наступному запуску події. Він зберігається після перезавантаження.

systemctl disable SERVICE- Вимикає послугу при наступному перезавантаженні або на наступній події зупинки. Він зберігається після перезавантаження.

systemctl is-enabled SERVICE - Перевірте, чи налаштована служба наразі для запуску чи ні при наступному перезавантаженні.

systemctl is-active SERVICE - Перевірте, чи служба наразі активна.

systemctl show SERVICE - Показати всю інформацію про послугу.

sudo systemctl mask SERVICE- Повністю відключити послугу, пов’язавши її з /dev/null; ви не можете запустити службу вручну або ввімкнути її.

sudo systemctl unmask SERVICE- Видаляє посилання на /dev/nullта відновлює можливість ввімкнення та або вручну запустити послугу.


UPSTART (застаріло з 15.04)

Якщо ми хочемо скористатись офіційним способом Upstart (Зверніть увагу, що на даний момент не всі сервіси були перетворені на Upstart), ми могли б використовувати такі команди:

status SERVICE- Це підкаже нам, чи працює конвертована служба чи ні. Зверніть увагу , що це засуджується на користь start, stop, statusі restart. Він також повідомить нам, чи послуга ще не перетворена на старт:

Перетворена послуга, як правило, виводить поточний стан (запуск, запуск, зупинка ...) та ідентифікатор процесу. Неконвертована послуга призведе до помилки щодо невідомої роботи .

Деякі ярлики можуть працювати лише з serviceкомандою, наведеною вище, але не з командами нижче, якщо вони не на 100% перетворені на початкові служби:

  • СТАРТ -sudo start mysql

  • СТОП -sudo stop mysql

  • РЕСТАРТ -sudo restart mysql

  • СТАТУС -sudo status smbd

Увімкнення / вимкнення послуги

Щоб увімкнути послугу від постійного запуску або зупинки, вам потрібно буде:

echo manual | sudo tee /etc/init/SERVICE.override

де строфа manualзупинить Upstart від автоматичного завантаження послуги при наступному завантаженні. Будь-яка служба із .overrideзакінченням матиме перевагу перед початковим файлом служби. Ви зможете лише після цього запустити послугу вручну. Якщо ви цього не хочете, просто видаліть .override. Наприклад:

echo manual | sudo tee /etc/init/mysql.override

Переведе службу MySQL в manualрежим. Якщо ви цього не хочете, згодом ви можете просто зробити

sudo rm /etc/init/mysql.override

і Перезавантажте, щоб послуга автоматично запустилася знову. Звичайно, щоб увімкнути послугу, найпоширеніший спосіб - це встановити її. Якщо ви встановите Apache, Nginx, MySQL або інші, вони автоматично запускаються після завершення установки та запускатимуться кожного разу, коли комп'ютер завантажиться. Якщо вимкнутись, як було зазначено вище, послуга буде використана manual.


Вам потрібно додати .serviceдо кожної команди? systemctl mongod statusпрацював просто чудово.
Дан Даскалеску

@DanDascalescu ні, ви не можете, але дозвольте мені уточнити, що там.
Луїс Альварадо

4
Чи слід розміщувати .override файл у /etc/init.d/, тобто там, де розміщується служба?
Obi Wan - PallavJha

Чому Upstart застарілий у 15.04? який правильний спосіб запуску скриптів при запуску / перезапуску в ubuntu 16.04 або пізнішої версії?
Kamalakannan J

1
Дякую за цю вичерпну відповідь. systemdНабір команд працює ласощі на Ubuntu 18.04.
Doktor J

355

В даний час існує три різних способи запуску програмного забезпечення як послуги в Ubuntu, SysV , Upstart та systemd . Служба тут визначається як програма, запущена системою у фоновому режимі, на відміну від запущеної та запущеної безпосередньо користувачем.

SysV

Традиційним способом запуску сервісів в Linux було розміщення сценарію /etc/init.d, а потім використання update-rc.dкоманди (або в дистрибутивах, заснованих на RedHat chkconfig), щоб включити або вимкнути його.

Ця команда використовує дещо м'яку складну логіку для створення посилань /etc/rc#.d, які керують порядком запуску послуг. Якщо ви запустите, ls /etc/rc2.dви можете побачити порядок того, що служби будуть вбиті з назвою файлу, як K##xxxxі почалося з імен файлів S##xxxx. ##В S##xxxxозначає «стартове замовлення» для обслуговування xxxx. І навпаки, ##in K##xxxxозначає порядок вбивства за службу xxxx.

Однією з головних проблем SysV було те, що під час завантаження системи все потрібно було робити послідовно, одна за іншою, що робить час завантаження системи справді повільним . Були зроблені спроби паралелізувати це, але їх було випадково і важко використати в повній мірі. Це було основною причиною створення Upstart .

На початку

Upstart використовує файли визначення завдання, /etc/initщоб визначити, з яких подій слід запустити службу. Отже, поки система завантажується, система запуску обробляє різні події, а потім може запускати паралельно декілька сервісів. Це дозволяє їм повною мірою використовувати ресурси системи, наприклад, запускаючи послугу, пов’язану з диском, під час запуску іншої служби, пов'язаної з процесором, або в той час, коли мережа очікує призначення динамічної IP-адреси.

Ви можете побачити всі запущені файли завдань, запустивши ls /etc/init/*.conf

Дозвольте мені зупинитися тут і сказати, що якщо ви не знаєте, що таке послуга чи що вона робить, НЕ відключайте її!

Не всі сервіси перетворені на початковий старт. Працюючи над командою сервера в Canonical протягом останніх кількох місяців, я працював над низкою перетворених файлів завдань, і найприємніша частина полягає в тому, що вона дозволяє позбутися всіх сценаріїв "магія" і просто помістити кілька команд тут і там, щоб точно визначити, як запустити послугу, і більше нічого. Але наразі було перетворено лише кілька традиційних мережевих сервісів, таких як кальмар та самба .

Чи базується послуга на старті?

Для того, щоб з’ясувати, чи послуга базується на старті, ви можете запустити команду стану:

status servicename

Якщо це новачка , це покаже:

$ status statd
statd start/running, process 942

Але якщо це не так, ви побачите щось подібне:

$ status apache2
status: Unknown job: apache2

У цьому випадку apache2не було перетворено на старт . Отже, для відключення apache2просто запустіть

sudo update-rc.d apache2 disable
sudo service apache2 stop

Вимкнути послуги (робочі місця) на початку

Визначення завдань для запуску не має update-rc.dкоманди. Щоб вимкнути завдання, вам потрібно відредагувати файл завдання безпосередньо, щоб його відключити. Є два способи зробити це.

Якщо ви все ще хочете вручну запустити його, тоді вам потрібно прокоментувати start onумову. Скажіть, ви хочете встановити samba , але не запускати його автоматично. Ось файл роботи (у натура):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

Щоб відключити samba , ви можете просто поставити #перед " start on local-filesystems". Зауважте, що, хоча він не запускатиметься під час завантаження, вам все-таки потрібно зупинити це

sudo service smbd stop

Якщо, однак, ви ніколи не хочете запускати самбу , я б запропонував фактично видалити пакунок. Якщо ви хочете встановити його, але не стартувати, ви також можете зробити:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Вимкнути послугу за допомогою строфи запуску / зупинки (станом на 11.04)

Починаючи з версією вискочки , який буде в 11.04, є нове ключове слово , яке відключає start onі stop onстрофи: manual. Отже, ще одним способом відключити послугу станом на 11.04 є:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

Ви можете створити overrideфайл для відключення послуги, не редагуючи визначення завдання, просто ввівши в нього manualключове слово.


20
Схоже, 11.04 теж має перевагу. Так echo manual >> /etc/init/<service>.overrideвважається кращим, оскільки він залишає оригінальним .conf filke неушкодженим. У будь-якому разі, все одно прикро, що для розробки такого базового включення / відключення потрібні 3 роки, і для цього немає GUI.
MestreLion

3
update-rc.d - те, що насправді має значення
Тимофей

2
Здається, набагато більше відповідає оригінальній темі, ніж відповіді, яку позначено як остаточну відповідь оригінальним плакатом запитань. Дякую! :)
Геннінг

1
У моєму випадку цей файл /etc/init/ssh.confіснує , але status sshі status sshdяк кажуть , «Невідома робота». Ця відповідь, схоже, не стосується такої можливості?
Брайан Z

1
status sshдає мені також "Невідому роботу", але service ssh statusпрацює для мене
ptim

129

sysv-rc-конф

Спробуйте використовувати sysv-rc-conf

sudo apt-get install sysv-rc-conf

і почати керувати послугами, виконати

sudo sysv-rc-conf

Яке виведе таке інтерактивне вікно

введіть тут опис зображення

Ви можете додатково переходити по сторінках, використовуючи Ctrl+nнаступну сторінку та Ctrl+pпопередню сторінку. Ви можете ввімкнути та відключити послуги, вибравши SPACEпотрібні рівні запуску.

Джобс-адмін

Іншим заступником буде Jobs-Admin , встановивши через

sudo apt-get install jobs-admin

Що також забезпечує такий графічний інтерфейс, як цей

попередній перегляд завдань-адміністратора

Щоб показати більше завдань, потрібно поставити галочку Показувати захищені завдання зі свого меню.

chkconfig

І третім варіантом буде chkconfig ,

sudo apt-get install chkconfig

Його можна використовувати через CLI chkconfig, показуючи список завдань On / Off. Також ми можемо переглядати системні послуги, використовуючиchkconfig –list

Послуги можна ввімкнути за допомогою

chkconfig <service> on

Послуги можна відключити за допомогою

chkconfig <service> off

І ми можемо навіть додати власний сервіс, використовуючи належний сценарій init із належними заголовками.

chkconfig --add <service>

update-rc.d

І інший варіант можна вказати тут update-rc.d , коротко пояснений тут .

Зауважте, що для Ubuntu Server 12.04 update-rc.d використовується замість chkconfig.


1
на сервері ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned

@pwned Ви можете редагувати та розміщувати оновлену інформацію про видання сервера. Дякую.
atenz

Я зробив так, як ви запропонували, тепер це питання для експертної оцінки.
pwned

jobs-admin не дозволяє змінювати роботу (Ubuntu 14.04), замість цього створюючи звіт про аварійне завершення ;-)
Саді

5
sysv-rc-conf не підходить для використання з запуском або systemd, він, очевидно, є лише для старої системи System 5 rc, яка майже десятиліття не була типовою для Ubuntu Linux. Debian Bug # 791689 визнає це і запитує, чому він не був позначений як конфліктний з systemd.
JdeBP

48

Для тих із нас, хто працює з Ubuntu над ssh, я думаю, що найприємніший варіант rcconf- це текстова програма:

sudo apt-get install rcconf
sudo rcconf

alt текст

Перейдіть за допомогою клавіш вкладки та стрілок, натисніть пробіл, щоб увімкнути / вимкнути. Зміни зберігаються протягом перезапуску.

Знімок екрана, запозичений з цього посту в блозі , який також показує sysv-rc-conf- подібний інструмент, який також дозволяє встановити рівень запуску. (Для тих, кому трапляється достатньо піклуватися про рівні рівня, бажаю змінити їх :)

На жаль, rcconf не працює з запуском (сервіси, перелічені в /etc/init/*), просто з традиційним механізмом ( ls -l /etc/init.d/*- тими, що не є символічними посиланнями).

На щастя, багато сервісів, які є релевантними при вході на сервер (Apache, Tomcat, mdadm, boinc-client ...), ще не переміщені до запуску.


6
Це все ще працює з початком роботи?
oKtosiTe

3
На жаль, немає. Але це спрацювало для всіх випадків, які я хотів змінити - найзручніші завдання, здається, - це переважно речі, які я ніколи не хочу відключати - апаратний годинник, демон журналу, мережа тощо (принаймні на сервері Ubuntu). Але це те, про що слід пам’ятати (я не був :), я оновив пост.
jg-faustus

На жаль, mysql було перетворено на початковий старт. І це послуга, яку я використовую лише тоді, коли я роблю якийсь проект.
MestreLion

На Ubuntu 12.04 є помилка з rcconf, яка заважає запуску програми. Для вирішення проблеми потрібно встановити діалоговий пакет.
відхилення

1
Оскільки ця відповідь була написана, її update-rc.dбуло змінено, а частина її застарілої функціональності була видалена . Помилка Debian # 727735 зазначає, що rcconf не змінено на відповідність. І ні, rcconf не працює і з systemd, таким чином, не застосовується до жодної системи за замовчуванням init для Ubuntu Linux протягом останнього десятиліття.
JdeBP

18

Я з’ясував, що є цей інструмент GUI, щось на зразок BUM, але сумісний із Upstart:

  • Джобс-адмін

    sudo apt-get install jobs-admin
    

Але це занадто просто і не дозволяють змінювати "захищені робочі місця" (що це за робочі місця? Apple має роботу, операційна система має демони!)
kakaz

Я навіть не дозволяю змінювати "незахищені завдання" (Ubuntu 14.04), натомість створюючи звіт про аварійне завершення ;-)
Саді

12

Редагування наявного конфігураційного файлу для початкових програм (як описано вище) - не така гарна ідея. Оновлений пакет може надавати оновлену конфігурацію, і вам доведеться повторювати свої зміни знову і знову.

Ознайомившись з man 5 initодним, ви знайдете більш підходяще рішення: використання конфігурації переопределення Короткий приклад. Скажімо, у нас є послуга під назвою "foobar", тому буде файл, який називається /etc/init/foobar.confз його конфігурацією на початку. Тепер ви не хочете видаляти цей файл і не змінювати його, але ви також не хочете запускати цю послугу? Так розмістити перевизначення файл поруч з ним: /etc/init/foobar.override, що містить (необов'язково заголовком з описом і) замість цього start on/ stop onрядки , які ви помістіть рядок з одним словом: manual. Таким чином, ви підказуєте foobar.confпочатковому користувачу в основному використовувати , але переосмислювати визначення запуску, щоб запустити цю службу лише при ручному застосуванні (через service foobar startнаш приклад).



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.