Linux
確定 Nginx 配置所在位置的跨發行版方式
我正在開發一個項目,理想情況下應該可以在任何 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