私の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