たとえば、次のスクリプトがあります。
...
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スクリプトを作成する場合は、それをシステムサービスとして実装することを検討する必要があります。