shell脚本源码安装nginx的详细过程
程序员文章站
2022-06-09 21:26:06
shell概念 shell是什么?shell是linux内核跟用户之间沟通的桥梁; shell也是一个命令解释器,用户可以输入命令到shell,shell将命令传递给linux内核,内核处...
shell概念
- shell是什么?shell是linux内核跟用户之间沟通的桥梁;
- shell也是一个命令解释器,用户可以输入命令到shell,shell将命令传递给linux内核,内核处理完毕,返回给shell,shell将返回的结果返给用户终端;
- shell是外壳,中间件,外壳有很多的种类,bash、csh、ksh、zsh等;
- shell和shell编程有什么关系?shell是命令解释器,用户和操作系统沟通桥梁,而shell编程基于shell解释器来实现具体的功能或者需求;
- shell命令、shell脚本、shell编程、shell之间解释?
shell编程用途
- shell编程的目的将重复的工作变成自动化,可以理解为批处理;
- shell主要是为了减轻人工的频繁的操作、提高运维工作效率,保证网站稳定、高效的运行;
- 例如需要源码编译lnmp web架构,20台都需要编译怎么办?
如何开启shell编程
- 任何的编程语言,都是从hello,world;
- shell编程其实就是将shell命令写入到脚本文件中;
- shell编程规范,脚本内容第一行必须以#!开头,其后接shell的种类,例如/bin/bash,/bin/sh等;
下面脚本看下shell脚本源码安装nginx的过程。
[root@localhost ~]# vim nginx.sh [root@localhost ~]# cat nginx.sh #!/bin/bash version=nginx-1.20.1.tar.gz name=nginx-1.20.1 install_dir=/usr/local log=/var/log/nginx #解决依赖关系 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel wget gd-devel gcc gcc-c++ yum -y groups mark install 'development tools' #创建用户 id nginx &>/dev/null if [ $? -ne 0 ];then useradd -s /sbin/nologin nginx fi #创建日志存放目录 if [ ! -d $log ];then mkdir -p /var/log/nginx chown -r nginx.nginx /var/log/nginx fi #下载nginx cd /usr/src/ wget http://nginx.org/download/$version #解压 tar xf $version mv $name nginx cd nginx/ && ./configure \ --prefix=$install_dir/nginx \ --user=nginx \ --group=nginx \ --with-debug \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_image_filter_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --http-log-path=$log/access.log \ --error-log-path=$log/error.log make && make install #配置环境变量 echo "export path=$install_dir/nginx/sbin:\$path" > /etc/profile.d/nginx.sh source /etc/profile.d/nginx.sh #创建服务文件 cat > /usr/lib/systemd/system/nginx.service <<eof [unit] description=nginx after=network.target [service] type=forking execstart=$install_dir/nginx/sbin/nginx execreload=$install_dir/nginx/sbin/nginx -s reload execstop=$install_dir/nginx/sbin/nginx -s quit privatetmp= true [install] wantedby=multi-user.target eof #开机自启 systemctl enable --now nginx
//测试 [root@localhost ~]# ./nginx.sh 已加载插件:fastestmirror loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 pcre-8.32-17.el7.x86_64 已安装并且是最新版本 软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本 软件包 zlib-1.2.7-19.el7_9.x86_64 已安装并且是最新版本 软件包 zlib-devel-1.2.7-19.el7_9.x86_64 已安装并且是最新版本 软件包 1:openssl-1.0.2k-22.el7_9.x86_64 已安装并且是最新版本 软件包 1:openssl-devel-1.0.2k-22.el7_9.x86_64 已安装并且是最新版本 软件包 wget-1.14-18.el7_6.1.x86_64 已安装并且是最新版本 软件包 gd-devel-2.0.35-27.el7_9.x86_64 已安装并且是最新版本 软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本 无须任何处理 已加载插件:fastestmirror loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com marked install: development tools --2021-10-25 12:15:53-- http://nginx.org/download/nginx-1.20.1.tar.gz 正在解析主机 nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:edb:5702::6, ... 正在连接 nginx.org (nginx.org)|52.58.199.22|:80... 已连接。 已发出 http 请求,正在等待回应... 200 ok 长度:1061461 (1.0m) [application/octet-stream] 正在保存至: “nginx-1.20.1.tar.gz.1” 100%[===================================================================================================================>] 1,061,461 670kb/s 用时 1.5s 2021-10-25 12:15:55 (670 kb/s) - 已保存 “nginx-1.20.1.tar.gz.1” [1061461/1061461]) checking for os + linux 3.10.0-862.el7.x86_64 x86_64 checking for c compiler ... found + using gnu c compiler + gcc version: 4.8.5 20150623 (red hat 4.8.5-44) (gcc) 省略.... nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp" make -f objs/makefile make[1]: 进入目录“/usr/local/nginx” cc -c -pipe -o -w -wall -wpointer-arith -wno-unused-parameter -werror -g -i src/core -i src/event -i src/event/modules -i src/os/unix -i objs \ -o objs/src/core/nginx.o \ src/core/nginx.c cc -c -pipe -o -w -wall -wpointer-arith -wno-unused-parameter -werror -g -i src/core -i src/event -i src/event/modules -i src/os/unix -i objs \ -o objs/src/core/ngx_log.o \ src/core/ngx_log.c test -f '/usr/local/nginx/conf/nginx.conf' \ || cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf' cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf.default' test -d '/usr/local/nginx/logs' \ || mkdir -p '/usr/local/nginx/logs' test -d '/var/log/nginx' \ || mkdir -p '/var/log/nginx' test -d '/usr/local/nginx/html' \ || cp -r html '/usr/local/nginx' test -d '/var/log/nginx' \ || mkdir -p '/var/log/nginx' make[1]: 离开目录“/usr/src/nginx” created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service. [root@localhost ~]# systemctl start nginx [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# ss -antl state recv-q send-q local address:port peer address:port listen 0 128 *:80 *:* listen 0 128 *:22 *:* listen 0 100 127.0.0.1:25 *:* listen 0 128 :::22 :::* listen 0 100 ::1:25 :::*
经过测试,想要直接使用nginx命令 需要在终端手动读取配置
//配置文件脚本里已经写好,这里直接读取就可以 [root@localhost ~]# source /etc/profile.d/nginx.sh [root@localhost ~]# which nginx /usr/local/nginx/sbin/nginx [root@localhost ~]# nginx -v nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (red hat 4.8.5-44) (gcc) built with openssl 1.0.2k-fips 26 jan 2017 tls sni support enabled configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
或者用source nginx.sh执行脚本
[root@localhost ~]# source nginx.sh //这种方式不需要手动读取环境变量
到此这篇关于shell脚本源码安装nginx的文章就介绍到这了,更多相关shell脚本安装nginx内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: Lua和C++的通信流程代码实例
下一篇: elixir 高可用系列 - 目录