Linux

確定 Nginx 配置所在位置的跨發行版方式

  • October 11, 2020

我正在開發一個項目,理想情況下應該可以在任何 Linux 發行版或 FreeBSD 上執行,只需最少的手動安裝,而不必打包在每個發行版的儲存庫中。/etc/nginx/它包括一個使用安裝腳本複製到的 Nginx 配置文件。

障礙:並非所有作業系統都將其儲存在同一個地方。在我所知道的每一個 Linux 中/etc/nginx/,它都進入/usr/local/etc/nginx/. (我的項目有Nginx作為依賴,Nginx預計通過OS包管理器安裝。)

那麼,以程式方式確定配置文件需要去哪裡的最佳方法是什麼?

根據不同的作業系統做出判斷是個好主意。

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

最好的方法是直接詢問 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如果配置文件不可用,它將無法在配置文件中使用。

要以程式方式使用它,請參閱所需程式語言的文件。您正在尋找執行 shell 命令和儲存輸出的方法。

這裡有一個關於如何在 bash 中編寫腳本的範例:

NGINX_CONFIG_PATH=`nginx -t 2>&1 | grep -m1 -o '/.*.conf'`
cp $INPUT_FILE $NGINX_CONFIG_PATH

分解它:

  • 2>&1 將 nginx STDERR 輸出重定向到 STDOUT,以便我們可以處理它。
  • -m1 for grep 僅顯示第一次出現。
  • -o 將搜尋範圍縮小到正則表達式
  • /.*.conf 搜尋第一次出現的 / 直到 .conf

引用自:https://unix.stackexchange.com/questions/613786