我正在开发一个项目,理想情况下应该可以在任何 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
如果配置文件不可用,则该配置文件将不起作用。
要以编程方式使用此功能,请参阅所需编程语言的文档。您正在寻找执行 shell 命令并存储输出的方法。
下面是一个关于如何在 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