たとえば、次のスクリプトがあります。
...
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ディレクトリに置き、S
(start)で始まるファイル名でrc3.dにリンクを作成すると、Linuxはこの機能を使用する必要があることをどうやって知ることができますかstart()
?
答え1
このスクリプトをディレクトリに入れて
/etc/init.d
(start)で始まるファイル名でリンクを作成した後、Linuxはその機能を使用する必要があることをどうやって知ることができますか?rc3.d
S
start()
私はそうは思わない。この関数はスクリプト内にあり、スクリプト自体から呼び出す必要があります。
対応する初期化スクリプトの周りの別の足場は、実行するアクションを知らせるパラメータ、などを使用して呼び出されstart
ます。リンク名(および)は、スクリプトの実行順序と開始または停止を指示する必要があるかどうかを示します。もちろん、systemdはこれを少し異なる方法で行いますが、私が正しく理解していれば、まだこのようなinitスクリプトをサポートできるので、実行時に正しい引数を渡す必要があります。stop
restart
K*
S*
これにより、初期化スクリプトに次の内容が表示されます。
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
最初のパラメータが何であるかを確認し、それに基づいて機能します。これはコードスニペットに欠けている部分です。
新しいinitスクリプトを作成する場合は、それをシステムサービスとして実装することを検討する必要があります。
答え2
(Linux)はそうではありません。 Linuxはカーネルです。 Gnu/Linux オペレーティングシステムは知っています。
特にinit
その過程です。init
スクリプトにはstart
、、stop
が必要ですrestart
。これらのメソッドには事前定義された意味があり、適切な時点で呼び出されます。これらのメソッドはスクリプトのインタフェースなので、実装する必要があります。
答え3
「S」でリンクを開始するからです。リンクが「K」(killから)で始まると、停止機能が実行されます。