
私は、各ディストリビューションのリポジトリにパッケージ化するのではなく、最小限の手動インストールでLinuxディストリビューションまたはFreeBSDで理想的に実行されるプロジェクトを進めています。これには、/etc/nginx/
インストールスクリプトとともにコピーされるNginx設定ファイルが含まれています。
障害物:すべてのオペレーティングシステムがそれを同じ場所に保存するわけではありません。私が知っているすべてのLinuxではそうです。/etc/nginx/
しかしFreeBSDではそうです/usr/local/etc/nginx/
。 (私のプロジェクトでは、Nginxは依存関係にあり、Nginxははいオペレーティングシステムのパッケージマネージャを介してインストールされることが予想されます。 )
それでは、設定ファイルがどこに移動するのかをプログラムで決定する最良の方法は何ですか?
答え1
最良の方法はnginxに直接問い合わせることです。
nginx -t
デフォルトの構成ファイルをテストし、その場所を表示します(見つからない場合はファイルパスエラーも発生します)。
例:
$ nginx -t
nginx: [emerg] open() "/opt/common/conf/nginx.conf" failed (2: No such file or directory)
nginx: configuration file /opt/common/conf/nginx.conf test failed
nginx -h
-Vフラグを使用することもできます。nginx -V
構成ファイルが使用できない場合、構成ファイルは何の影響もありません。
この機能をプログラムで使用するには、必要なプログラミング言語のマニュアルを参照してください。私はシェルコマンドを実行して出力を保存する方法を探しています。
以下は、Bashでスクリプトを作成する方法の例です。
NGINX_CONFIG_PATH=`nginx -t 2>&1 | grep -m1 -o '/.*.conf'`
cp $INPUT_FILE $NGINX_CONFIG_PATH
それを破壊する:
- 2>&1は、nginx STDERR出力をSTDOUTにリダイレクトして処理できるようにします。
- grepの-m1は最初の発生のみを表示します。
- -o 検索範囲を正規表現に絞り込みます。
- /.*.conf は、.conf まで / が最初に現れるものを検索します。
答え2
さまざまなオペレーティングシステムに基づいて判断することをお勧めします。
if [ -d /etc/nginx ]; then
cp YOURFILE /etc/nginx/
elif [ -d /usr/local/etc/nginx/ ]; then
cp YOURFILE /usr/local/etc/nginx/
else
cp YOURFILE /some_other_dir/
fi