特定のデバイスが起動してカーネルモジュールがロードされると、initスクリプトが起動します。

特定のデバイスが起動してカーネルモジュールがロードされると、initスクリプトが起動します。

私のUbuntu 12.04サーバーで次のものを作成する必要があります。初期化ファイルInfinebandインターフェースを待っています(デバイス:MLX4_0、相互作用:イブラヒモビーチ0) 完全に始まるまでクネムカーネルモジュールがロードされました。

初期化ファイルシステムが起動するのを待ってから手動で起動すると、スクリプトは機能しますが、起動時にservice myscript start正常にロードすると機能しません。起動順序を使用しています99ただし、これらの機能が実行されるのを待つ必要があるため、正しく開始されません。

これを達成するための正しい構文は何ですかinit.d(カーネルモジュール1と1)?何かキーワードがあるようですが、# Required-Start: $remote_fs $syslog $network特定のインターフェースやカーネルモジュールに合ったキーワードを見つけることができませんね。

背景の場合:initスクリプトスラムMPIを開くそして無制限の帯域幅インタラクティブ。私はコンパイルしましたスラムそしてMellanoxインフィニバンドドライバサポートし、MPIを開くこのバージョンのSLURMに接続してください。その結果、openMPI は次のより小さい Mellanox infiniband ドライバを直接使用します。iPod(inifinibandを介したIP)。これを行うには、システムに登録されているメモリを使用する必要があります。これは次のように設定する必要があります。制限なし

だから:

私の出力にいくつかのlogger出力を追加しました。初期化ファイルスクリプト。私はモジュールが実際に実行されていることを発見しました。だから私は問題を完全に理解していません。これは奇妙で、いくつかの環境変数が必要であり、初期化ではなく全ユーザースペースでのみ設定されることに関連している可能性があります。

問題は、次に設定されたメモリロックの制限に関連しています。/etc/security/limits.conf。動作させるには設定する必要がありました。

*             -   memlock       unlimited
root          -   memlock       unlimited

このようにしてslurmデーモンを起動するときSSH接続すると、すべてがうまく動作します。デーモンを起動するinitプロセスの場合は、ルールを考慮しないのと同じです。/etc/security/limits.conf

答え1

init.dファイルが具体的に何であるかはわかりませんが、udevデバイスが追加されたときにスクリプトを実行するための規則は次のとおりです。

ACTION=="add", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", RUN+="/path/to/executable"

udevadm一般に、デバイスの追加方法とそのモジュールのロード方法について詳しくは、詳細を確認する必要があります。そこでVID正しい合計値を見つけることもできますPID

デバイスとカーネルモジュールの組み合わせを許可しますか?

はい。まあ..いいえ。おそらく?この質問に対する答えは、デバイスに完全に追加するブロックレベルによって異なります。udevデバイスの初期検出からデバイス全体のロードと初期化まで、考慮する必要がある多くの作業があります。戻る

そのうちのいくつかは次のとおりです。

  • 上位バス/デバイス/サブシステムでハードウェアの初期検出

  • 適切なカーネルモジュールを見つけてロードします。

  • /dev devfs適切なデバイス特殊ファイルでファイルシステムを入力します。

  • 現在デバイスに追加されているサブデバイスを検出し、すすぎ、繰り返します。

これらの作業レベルの全部または一部の規則を指定できます。また、これらのレベルのタスクが何であるかをリアルタイムでudevadm trigger直接確認することもできます。monitor

詳しく見てください。この情報もっとおなじみになりたいなら。

答え2

これにはUpstartジョブを使用します。

# Ensures that the device is up and filesystem is too
start on filesystem and net-device-up IFACE=ib0
stop on runlevel [016]

# Ensures that module is loaded
pre-start exec modprobe -q knem

exec /path/to/exec

関連情報