Por exemplo, tenho o seguinte script:
...
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}"
}
...
Se eu colocar este script no diretório /etc/init.d e depois criar um link em rc3.d com o nome do arquivo começando com S
(iniciar), como o Linux sabe que é necessário usar a função start()
?
Responder1
Se eu colocar este script no diretório
/etc/init.d
e depois criar um linkrc3.d
com o nome do arquivo começando comS
(iniciar), como o Linux sabe que é necessário usar a funçãostart()
?
Eu não acho que isso acontecerá. A função é interna ao seu script e o script deve chamá-la sozinho.
O outro andaime que envolve esse script de inicialização chama com um argumento que diz o que fazer, start
, stop
ou restart
algo assim. Os nomes dos links ( K*
e S*
) informam em que ordem o script deve ser executado e se eles devem ser informados para iniciar ou parar. É claro que o systemd faz as coisas de maneira um pouco diferente, mas se bem entendi, ele ainda pode suportar scripts de inicialização como esse e, portanto, precisa passar a eles o argumento correto ao executá-los.
Então você vê coisas assim nos scripts de inicialização:
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
O case
na parte inferior verifica qual é o primeiro argumento e funciona com base nisso; essa é a parte que falta no seu snippet.
Se você estiver escrevendo um novo script de inicialização, considere implementá-lo como um serviço systemd.
Responder2
Ele (Linux) não. Linux é um kernel. O sistema operacional Gnu/Linux sabe.
Em particular, o init
processo sabe. init
os scripts precisam ter start
, stop
, restart
. Esses métodos possuem significados predefinidos e são chamados no momento apropriado. Esses métodos são a interface do seu script, você deve implementá-los.
Responder3
Por causa do "S" com o qual você iniciou o link. Quando um link começa com "K" (de kill), ele executa a função stop.