Як я можу зробити скрипт у /etc/init.d запуск при завантаженні?


83

Я думаю, що щось читав ще про це, але не можу згадати, як це робиться. По суті, у мене є сервіс, в /etc/init.dякому я хотів би автоматично запускатися під час завантаження. Я пам’ятаю, що це має щось спільне із символічним включенням сценарію до /etc/rc.dкаталогу, але в даний час я не можу згадати. Яка команда для цього?

Я вважаю, що я похідний від Fedora / CentOS.


Це залежить від вашої ОС. Який варіант Unix запущений, і якщо Linux, який дистрибутив? Який з /etc/init, /etc/init.d, /etc/rc.d, /etc/rc.localі дещо більше у нього є?
Жиль

1
Я думаю, що я на CentOS або щось подібне. Чи відрізнятиметься відповідь від Debian? Мене цікавить і рішення для Debian.
Naftuli Kay

Відповіді:


109

Якщо ви працюєте в системі Red Hat, як ви вже згадували, ви можете зробити наступне:

  1. Створіть скрипт і помістіть його /etc/init.d(наприклад /etc/init.d/myscript). Сценарій повинен мати такий формат:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

Формат досить стандартний, і ви можете переглядати наявні сценарії в /etc/init.d. Потім ви можете використовувати скрипт як так /etc/init.d/myscript startчи chkconfig myscript start. Сторінка ckconfigman пояснює заголовок сценарію:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

Приклад запуску, зупинки та коду стану використовує допоміжні функції, визначені в /etc/init.d/functions

  1. Увімкніть сценарій

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Перевірте, чи справді сценарій увімкнено - вам слід побачити "увімкнено" для вибраних рівнів.

    $ chkconfig --list | grep myscript
    

3
Chkconfig - те, чого ти хочеш. +1
whoami

Чому init запустити щось на рівнях 2, 3, 4 і 5? Чи не потрібно подбати про те, щоб уникнути запуску сервера на рівні 2? І runlevel 4 так чи інакше не визначений на RHEL, тому навіщо намагатися запустити його на цьому рівні? Не критика, просто хочу знати. Я рідний користувач Slackware.
Брюс Едігер

4 не визначено на RHEL, але він існує. Ви можете його вкрасти для власних речей.
Кевін М

Заголовок взято зі сторінки "chkconfig man". Я особисто дотримуюся 235 або просто 35 у більшості випадків.
canen

Чи є журнал, на який я можу подивитися, якщо щось не запускається під час запуску?
Utkarsh Sinha

10

Ви перевіряєте, на якому рівні запуску зазвичай працює ваша машина.

runlevel

Часто це 5 або 2 - існують різні умовності, але нічого насправді не встановлено, афаік. Ubuntu використовує 2, тоді як колишній дистрибутив я використовував завжди

  • 1 Один користувач (суперкористувач)
  • 2 багатокористувацькі
  • 3 багатокористувацькі мережі +
  • 4 не використовується / визначається користувачем
  • 5 мультикористувальників, мережа + X11

Тоді ви робите символьне посилання зі свого init-скрипту, можливо, /etc/init.d/foobarдо/etc/rc2.d/SXYfoobar

S означає "Запустити цей скрипт на цьому рівні запуску (тут: 2). XY - двоцифрове десяткове число, яке є актуальним для послідовності, сценарії запускаються.

Якщо ви будете залежати від сценарію S45barfoo, який буде запущений перед вами, а S55foofoo залежить від вашого сценарію, ви вибрали б xy між 45 і 55. Для рівних цифр порядок завантаження не визначений.

Ubuntu тим часом перейшов (переходить) на іншу процедуру запуску, яку називають upstart.

І зауважте: не завжди посилання посилаються /etc/rcX.d- іноді це /etc/init/rcX.dчи щось подібне, але його слід легко знайти, десь нижче / тощо.

Якщо ви хочете щось запустити в кінці стартових сценаріїв, /etc/rc.localслід шукати файл, але якщо це залежить від уже запущеного X11, ви можете шукати параметр автоматичного запуску вашого робочого середовища або /etc/X11/Xsession.d/з подібним малюнком, як описано вище.

Якщо ви залежите від мережі, яка працює, є окремий каталог (if-up.d) і для встановлених пристроїв, таких як зовнішні USB-накопичувачі /etc/udev/rules.d/.


Хіба не існує команди, яка робить для вас символом? Я думав, що пам’ятаю щось подібне.
Naftuli Kay

1
Чи не так update-rc.d?
Naftuli Kay

GUI або командний рядок? Ваш DE може надати інструмент для маркування рівнів запуску або зупинки сценарію. Я бачив щось подібне, але не пам’ятаю імені та як вказати число (xy).
користувач невідомий

Командний рядок. Він обробляє символи, що посилаються на вас, і дозволяє вам вмикати перемикачі, виконуються чи ні сценарії.
Naftuli Kay

3

Як Naftuli Tvi Kay запитав про Debian вище: Починаючи з Debian 6, ваш сценарій повинен містити заголовок LSB (Linux Standards Base), який вказує на його залежності та можливості ( див. Сторінку wiki wiki ).

Якщо заголовок LSB присутній, ви можете використовувати insservдля включення свого сценарію до процесу завантаження ( див. Іншу сторінку wiki wiki ).

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