これは、オペレーティングシステムの検出に関連している可能性がありますが、特にシステムで現在使用されているinitシステムが必要です。
Fedora 15とUbuntuはsystemdを使用するようになり、UbuntuはUpstart(15.04までの長いデフォルト)を使用していましたが、他のものはSystem Vのバリエーションを使用しています。
クロスプラットフォームデーモンになるために書いているアプリケーションがあります。初期化スクリプトは、configureで渡すことができるパラメーターに基づいて動的に生成されています。
私がやりたいのは、彼らが使用している特定のinitシステム用のスクリプトを生成することです。これにより、インストールスクリプトをrootとしてパラメーターなしで合理的に実行でき、デーモンを自動的に「インストール」できます。
これは私が思いついたものです:
- / binでsystemd、upstartなどを検索します
- / proc / 1 / commをsystemd、upstartなどと比較します
- ユーザーに尋ねる
これを行う最良のクロス/プラットフォーム方法は何でしょうか?
関連の種類、大部分の* nixにbashを依存させることはできますか、それともディストリビューション/ OSに依存しますか?
対象プラットフォーム:
- マックOS
- Linux(すべてのディストリビューション)
- BSD(すべてのバージョン)
- Solaris、Minix、およびその他の* nix
ps -p 1 -o command
(現在のパスを表示しますinit
)。Arch LinuxおよびFedora(IIRC)では、systemd
バイナリへのシンボリックリンクです(おそらくすべてのsystemd
システムで同じです)。でupstart
、init --help
使用情報を印刷upstart
します。私のボックスには、誰にメールを送信するかが記載されています。FreeBSD(sysV)では、これはエラーを返します。他のシステムにも同様の手がかりがあるかもしれませんが、この質問を聞いてから、すべてのプラットフォーム用にそれらを作成し、それぞれに個別のパッケージを作成することにしました。
sudo lsof -a -p 1 -d txt
より正確な結果が得られることを学びました。ps
任意の名前を出力lsof
する場合がありますが、実際の実行可能パスを取得できます。(私の質問unix.stackexchange.com/questions/102453/…を参照)