GNU/Linux >> Linux の 問題 >  >> Linux

シェルを使用してinitシステムを検出しますか?

これはオペレーティングシステムの検出と関係があるかもしれませんが、特にシステムで現在使用されているinitシステムが必要です。

Fedora 15とUbuntuは現在systemdを使用しており、UbuntuはUpstart(15.04までの長いデフォルト)を使用していましたが、その他はSystemVのバリエーションを使用しています。

クロスプラットフォームデーモンとして作成しているアプリケーションがあります。 initスクリプトは、configureで渡すことができるパラメーターに基づいて動的に生成されています。

私がやりたいのは、彼らが使用している特定のinitシステムのスクリプトを生成することだけです。このようにして、rootとしてパラメータなしでインストールスクリプトを合理的に実行でき、デーモンを自動的に「インストール」できます。

これが私が思いついたものです:

  • / binでsystemd、upstartなどを検索します
  • / proc / 1 / commをsystemd、upstartなどと比較します
  • ユーザーに尋ねる

これを行うための最良のクロス/プラットフォームの方法は何でしょうか?

関連する種類の*nixの大部分をbashに依存できますか、それともディストリビューション/ OSに依存しますか?

ターゲットプラットフォーム:

  • Mac OS
  • Linux(すべてのディストリビューション)
  • BSD(すべてのバージョン)
  • Solaris、Minix、およびその他の* nix

承認された回答:

2番目の質問の答えは、いいえです。 ポータブルシェルプログラミングのリソースをご覧ください。

最初の部分に関しては–まず第一に、あなたは確かに注意しなければなりません。 確認のためにいくつかのテストを実行します –誰かが持っているという事実のため systemd(例)がインストールされていても、実際にデフォルトのinitとして使用されているわけではありません。 。また、/proc/1/commを見てください さまざまなinitプログラムをインストールすると、自動的に/sbin/initが作成されるため、誤解を招く可能性があります。 シンボリックリンクのハードリンク、またはメインプログラムの名前が変更されたバージョンです。

おそらく最も便利なのは、initスクリプトの種類を調べることかもしれません。なぜなら、それらは、実行するものに関係なく、実際に作成するものだからです。

ちなみに、LinuxとBSDシステムの両方と互換性のあるinitスクリプトの構造を提供することを目的としたOpenRCもご覧になるかもしれません。


Linux
  1. Linuxシステムの現在のランレベルはどれくらいですか?

  2. ターミナルで使用しているシェルをテストする方法は?

  3. シェルでファイルを実行するとどうなりますか?

  1. MySQL レプリケーションにおける「システム ユーザー」の目的は何ですか

  2. Pythonを使用してSSHする最も簡単な方法は何ですか?

  3. brk() システムコールは何をしますか?

  1. export の Unix シェル変数のスコープは何ですか?

  2. systemv init と比較して、systemd のセキュリティへの影響は何ですか?

  3. init は正確に何をしますか?