Например, у меня есть следующий скрипт:
...
start(){
echo "Starting..."
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"
touch /var/lock/subsys/dbora
}
stop(){
echo "Stopping..."
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole"
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
rm -f /var/lock/subsys/dbora
}
restart(){
stop
start
}
usage(){
echo "usage: $0 {start|stop|restart}"
}
...
Если я помещу этот скрипт в каталог /etc/init.d и после этого создам ссылку в rc3.d с именем файла, начинающимся с S
(start), как Linux узнает, что необходимо использовать функцию start()
?
решение1
Если я помещу этот скрипт в каталог
/etc/init.d
и после этого создам ссылкуrc3.d
с именем файла, начинающимся сS
(start), как Linux узнает, что необходимо использовать функциюstart()
?
Я не думаю, что это так. Функция является внутренней для вашего скрипта, и скрипт должен сам ее вызывать.
Другие леса, окружающие этот скрипт инициализации, вызываются с аргументом, который сообщает, что делать, start
, stop
, restart
или что-то в этом роде. Имена ссылок ( K*
и S*
) сообщают, в каком порядке запускать скрипт и следует ли им сообщать о запуске или остановке. Конечно, systemd делает все немного по-другому, но если я правильно понимаю, он все еще может поддерживать такие скрипты инициализации, и поэтому должен передавать им правильный аргумент при запуске.
Итак, в скриптах инициализации вы видите что-то вроде этого:
do_start() {
something here...
}
do_stop() {
something else here...
}
case $1 in
start)
do_start;;
stop)
do_stop;;
restart)
do_stop;
do_start;;
*)
usage;;
esac
Внизу case
проверяется первый аргумент и выполняется работа на его основе; именно эта часть отсутствует в вашем фрагменте.
Если вы пишете новый сценарий инициализации, вам следует рассмотреть возможность его реализации в виде службы systemd.
решение2
Он (Linux) не делает. Linux — это ядро. Операционная система Gnu/Linux знает.
В частности, init
процесс знает. init
скрипты должны иметь start
, stop
, restart
. Эти методы имеют предопределенные значения и вызываются в соответствующее время. Эти методы являются интерфейсом для вашего скрипта, вам нужно реализовать их.
решение3
Из-за "S", с которого вы начали ссылку. Когда ссылка начинается с "K" (от kill), она запустит функцию stop.