如何使用bash脚本检查当前Web服务器是NGINX还是Apache?

llew8vvj  于 2023-05-22  发布在  Nginx
关注(0)|答案(5)|浏览(238)

我在Ubuntu VM上部署了一个Laravel项目。我现在正在编写一个脚本,以了解当前的VM是使用nginx还是Apache编程部署的。
我知道我可以使用这些psgrep命令进行检查,我会找到答案

root@theawsbiz:~# ps -aux | grep apache                                                                                                                 
root      3446  0.0  1.8 544540 37144 ?        Ss   17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3449  0.1  1.9 550388 39796 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3454  0.0  1.0 547336 21532 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3457  0.0  1.8 548196 37864 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3458  0.0  1.0 547320 21428 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3462  0.0  1.7 550008 36264 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3465  0.0  1.8 550408 38160 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3466  0.0  1.9 550400 40512 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3467  0.0  1.0 547320 21416 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3468  0.0  1.7 548228 36236 ?        S    17:02   0:00 /usr/sbin/apache2 -k start                                                             
www-data  3520  0.0  0.9 546872 19964 ?        S    17:06   0:00 /usr/sbin/apache2 -k start                                                             
root      3526  0.0  0.0  14856  1036 pts/1    S+   17:06   0:00 grep --color=auto apache                                                               
root@theawsbiz:~# ps -aux | grep nginx                                                                                                                  
root      3529  0.0  0.0  14856  1092 pts/1    S+   17:06   0:00 grep --color=auto nginx                                                                
root@theawsbiz:~#

有了这些结果,我知道这个VM使用的是Apache。
但是,我不知道如何通过Bash脚本检查它。一个人要怎么做呢?现在我愿意听取任何建议。

xxls0lw8

xxls0lw81#

由于您正在尝试使用grepps来实现这一点,因此可以执行以下操作:

if [[ `ps -acx|grep apache|wc -l` > 0 ]]; then
    echo "VM Configured with Apache"
fi
if [[ `ps -acx|grep nginx|wc -l` > 0 ]]; then
    echo "VM Configured with Nginx"
fi
zengzsys

zengzsys2#

ss命令可以告诉您哪个进程正在侦听端口。
例如,ss -tlnp | grep -E ":80\b"告诉您哪个进程正在侦听tcp端口80。你可以看到它是Apache或Nginx。

5lhxktic

5lhxktic3#

1.您可以对localhost进行curl并grep头文件

$ curl -v api.company.co.ke 2>&1 |grep -i server | awk -F: '{print $2}'

nginx/1.10.3

You can run the command in a subshell and get the output

 ❯ get_server_version=$(curl -v api.company.co.ke 2>&1 |grep -i server | awk -F: '{print $2}') 
 ❯ echo $get_server_version                                                                            
 nginx/1.10.3

或者只运行pgrep

❯ { pgrep nginx && server_version="nginx"; } || { pgrep apache  && server_version="apache"; } || server_version="unknown"

# On server running nginx
 ❯ echo $server_version
nginx

# On server with neither nginx nor apache
 ❯ echo $server_version
unknown
f4t66c6m

f4t66c6m4#

由于curl并不总是检索web服务器的类型,您可以在服务器上本地使用以下代码:

for webservice in gitlab apache nginx lighttpd; do 
    if `ps aux|grep -v grep|grep -q $webservice`; then 
        echo $webservice; 
        break; 
    fi;
done

如果你有很多值,不要使用break语句(gitlab使用nginx)。
如果你在服务器上有netstat(我认为你可以使用/proc信息):

netstat -naptu |grep :80 |awk '{print $NF}'|cut -d"/" -f2|uniq

对于https的端口80或443。
最好的问候

hzbexzde

hzbexzde5#

使用ps检查进程信息:运行以下命令以查看正在运行的Web服务器进程:复制代码

ps -ef | grep -E '(apache2|httpd|nginx)'

如果输出显示名称为apache2或httpd的进程,则表明Apache正在运行。如果它显示的进程名为nginx,那么它就是Nginx。

相关问题