Как выполнить сценарий оболочки при запуске?

59661
vijay.shad

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

Мои выводы говорят мне, чтобы поместить этот файл в папку /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 
13
Я знаю, что это старый ... но оболочка должна быть '#! / Bin / sh' not '#! / Bin / bash' / bin / sh, более вероятно, будет работать в случае машины, которая имеет проблемы во время запуска (например, / usr / lib не может быть смонтирован) Rich Homolka 11 лет назад 0

3 ответа на вопрос

18
aronchick

/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

разве это не более распространено в "ln -s /etc/init.d/script" для rcX.d / *? ozma 6 лет назад 0
8
Peter

Вы не должны - и не должны - создавать файлы в /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
Neal

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

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

Похожие вопросы