web-dev-qa-db-ja.com

SuSEの起動が完了した後にスクリプトを実行するにはどうすればよいですか?

(再)ブートが終了したことをサーバーから(うなり声で)通知してほしい。うなり声を送信するphpファイルの準備はできていますが、行を追加するファイルがわかりません。

SuSEの起動が完了した後にのみ実行されるようにコードを追加するためにどのファイルが必要ですか?

7
Radek

Suse Linux Enterprise 11 SP2(およびopenSUSE?)の新しい構文

最善の方法は、PHPスクリプトを呼び出すシェルスクリプトを作成することです。このシェルスクリプトのヘッダーには、次のコメントが必要です。

#!/bin/sh
### BEGIN INIT INFO
# Provides:          nothing
# Required-Start:    $all
# Default-Start:     3 5
# Default-Stop:      4
# Short-Description: single_line_description
# Description:       multiline_description
### END INIT INFO

/etc/init.d/skeletonには、典型的なテンプレート(説明コメントが多数含まれています)があります。このテンプレートには、PHPスクリプトをフックするために必要なコードが含まれています。PHPスクリプトを呼び出す必要がある開始ケースが表示されます。
必要になると思われないため、ヘッダー内のいくつかのオプションパラメータを破棄しました。

重要
少なくともスケルトンを使用して( initスクリプトのアクション を参照)、少なくとも開始ケースを実装することが重要です。最初のケースでは、それがスクリプトを呼び出す場所です。

ブートの最後に呼び出される小さなスクリプトの例を次に示します: 私の要点を参照 。 Default-Stopに無効な実行レベルを設定しましたが、シャットダウン中にスクリプトがまだ呼び出されています。とにかく、シャットダウン中の「開始」ケースのコードではなく、「停止」ケースのコードが実行されます。

スクリプトを作成したら、それを/etc/init.dにコピーします。initスクリプトがboot-notificationと呼ばれていると想定して、(rootとして)次のようにします。

chown root:root boot-notification
chmod 0750 boot-notification
mv boot-notification /etc/init.d/

次に、initシステムにスクリプトを「登録」する必要があります。 insservコマンドを使用して(再びrootとして)、YaSTを使用できます。

insserv boot-notification

次に、各initレベルを調べることにより、スクリプトが最後に実行されるものの1つであることをさらに確認できます。ランレベル3のみを選択した場合、これを行うことができます。

ls -l /etc/init.d/rc3.d/S*

これにより、initスクリプトへのリンクのリストが返されます。スクリプトへのリンクは、リストの最後(またはその近く)にあるはずです。

注:より動的なinitスクリプトの記述方法を試してみたい場合は、次の2ページを読むことをお勧めします。

5
Huygens

(open)SUSEは/etc/init.d/after.local この目的のために。実行する必要があるコマンドをそのファイルに追加するだけです。これはSystemV initで正常に機能しますが、systemdでは、AFAIKを別の方法で解決する必要があることに注意してください。

8
Petr Uzel

OpenSUSE 12.2(Mantis)の場合、「ローカル後」のscript/etc/init.d/after-local、そしてあなたはsystemctlを介してそれを有効にする必要があるかもしれません、このように...

enable /etc/init.d/after-localに、

systemctl enable after-local.service

ステータスの確認 /etc/init.d/after-localの、

systemctl status after-local.service
4
user34461

新しいinitスクリプトを追加することは、Suseでは非常に簡単です。

最善の方法は、PHPスクリプトを呼び出すシェルスクリプトを作成することです。このシェルスクリプトのヘッダーには、次のコメントが必要です。

#!/bin/sh
#chkconfig: 35 99 00
#description: Notify of boot completion

/etc/init.d/skeleton.compat(chkconfig構文をサポートするもの)に、典型的なテンプレート(説明コメントのロード付き)があります。新しいLSB標準をサポートする7etc/init.d/skeletonもありますが、説明が少し複雑ですより強力ですが、セットアップ方法を説明します。このテンプレートには、PHPスクリプトをフックするために必要なコードが含まれています。PHPスクリプトを呼び出す必要がある開始ケースが表示されます。

私があなたに与えた重要な番号はchkconfig lineにあります。

  • 35:このスクリプトは、init 3(コンソールモード、サーバーでは通常)またはinit 5(グラフィカルモード、デスクトップではより一般的)のいずれかで呼び出されることを意味します
  • 99:は、init 3または5での優先順位です。これは、最後に呼び出されることを意味します。他のいくつかのブートスクリプトは、優先度99で呼び出すことができることに注意してください。
  • 00:シャットダウン/再起動の優先順位です。システムがダウンするとすぐに通知を受け取ることもできます。

スクリプトを作成したら、それを/etc/init.dにコピーします。initスクリプトがboot-notificationと呼ばれていると想定して、(rootとして)次のようにします。

# chown root:root boot-notification
# chmod 0750 boot-notification
# mv boot-notification /etc/init.d/

次に、initシステムにスクリプトを「登録」する必要があります。 chkconfigコマンドを使用します(ここでもrootとして):

# chkconfig --add boot-notification

これが正しく考慮されていることを確認してください:

# chkconfig boot-notification
boot-notification on

見ればいいですよ!
次に、各initレベルを調べることにより、スクリプトが最後に実行されたものの1つであることをさらに確認できます。ランレベル3のみを選択した場合、これを行うことができます。

$ ls -l /etc/init.d/rc3.d/S*

これにより、initスクリプトへのリンクのリストが返されます。スクリプトへのリンクは、リストの最後(またはその近く)にあるはずです。

注:より動的なinitスクリプトの記述方法を試してみたい場合は、次の2ページを読むことをお勧めします。

2
Huygens

それには2つの方法があることがわかりました。

  1. 何よりもまず、ターミナルを開いて次のように入力します。

Sudo crontab -e

次に入力

@reboot Sudo <command_to_execute_at_startup>

  1. 次に、サービスファイルを作成できます この方法を使用
0
Vector