13

Я создал скрипт для запуска сервера (мой первый вопрос). Теперь я хочу, чтобы он запускался при загрузке системы и запускал определенный сервер. Что я должен сделать, чтобы сделать это?

Мои выводы говорят, что я поместил этот файл в папку /etc/init.d , и он запустится, когда система загрузится. Но я не могу понять , как будет start первый аргумент на старте? Это предопределено где-то, чтобы использовать start как $1? Если я хочу иметь startall , который запустит все серверы в сценарии, то какими параметрами я могу управлять?

Мой скрипт такой:

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac

3 ответа3

18

/etc/init.d - это каталог скриптов, в котором появляются исполняемые скрипты. Однако для запуска скриптов в определенном порядке после запуска вашей системы вам необходимо добавить файлы в каталог /etc/rc#.d . Записи, которые появляются здесь, сообщают вашей системе, в каком порядке и на каком уровне запуска должны выполняться сценарии на уровне /etc/init.d . Число после rc указывает, на каком уровне запуска машина работает, согласно этой диаграмме:

http://en.wikipedia.org/wiki/Runlevel

Так что если у вас есть:

/etc/init.d/importantscript

Тогда вам нужны (пустые) файлы:

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript

S означает начало, а K означает убить. Когда ваша машина запускается, система скажет:«А, я работаю на RunLevel 3, давайте перейдем к rc3.d, чтобы увидеть, какие сценарии в /etc/init.d должны быть запущены и в каком порядке». В этом случае система отсортирует по «S», а затем по номеру после «S» и выполнит «/etc/init.d/importantscript start». 20 только для целей заказа ... ваш сценарий будет работать после 'S19' и перед 'S21'. Вы можете создать эти файлы, просто выполнив:

sudo touch /etc/rc.d/rc3.d/S20importantscript

Вот также хорошее резюме: http://www.linux.com/news/enterprise/systems-management/8116-an-introduction-to-services-runlevels-and-rcd-scripts

8

Вам не нужно - и не следует - создавать файлы в /etc/rc.d/rcN.d/ ; что вы должны сделать вместо этого, это поместить комментарий в вашем чтении сценария инициализации

# chkconfig NNN A B

где NNN - это набор уровней выполнения, на которых вы хотите, чтобы скрипт был активным (например, 345 если он активен на уровнях выполнения 3 , 4 и 5), а A и B - приоритеты запуска и остановки. Затем chkconfig --add foo (при условии, что ваш скрипт называется foo) создаст файлы в /etc/rc.d/rcN.d/ с соответствующими именами.

Затем вы можете использовать service foo bar для отправки сообщения bar в ваш сценарий (например, start , stop , что угодно - отсюда ваши $1 ).

0

$ 1 - это аргумент командной строки, который передается вашему сценарию, это один из параметров start, stop или restart. В openSUSE я не помню, чтобы у меня была возможность передавать другие аргументы в скрипт при использовании редактора уровней запуска, поэтому я думаю, что это, вероятно, единственные, которые вы должны использовать.

Я не использую CentOS самостоятельно, но кажется, что программа для управления тем, что запускается, на каком уровне запуска является ntsysv.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .