美文网首页
CentOS7设置nginx开机自启动

CentOS7设置nginx开机自启动

作者: 凯光V | 来源:发表于2020-05-20 20:34 被阅读0次

    原文:https://www.jianshu.com/p/ca5ee5f7075c

    前言

    服务器每次重启,都需要手动启动一些服务,这不是一个程序员可以忍受的,难怪大家都喜欢写脚本。接下来三篇文章,分别记录一下nginx、tomcat和mysql的开机自启动配置。

    systemd

    systemd简介

    CentOS7已不再使用chkconfig管理启动项,而是使用systemd。关于systemd的衍生和发展,可以参见《CentOS7/RHEL7 systemd详解》《CentOS7进程管理systemd详解》。简单介绍如下:

    Linux系统从启动到提供服务的过程是这样,先是机器加电,然后通过MBR或者UEFI加载GRUB,再启动内核,内核启动服务,然后开始对外服务。

    SysV init、UpStart、systemd主要是解决服务引导管理的问题。

    SysV init是最早的解决方案,依靠划分不同的运行级别,启动不同的服务集,服务依靠脚本控制,并且是顺序执行的。在CentOS5中使用,配置文件为/etc/inittab。

    SysV init方案的优点是:原理简单,易于理解;依靠shell脚本控制,编写服务脚本门槛比较低。

    缺点是:服务顺序启动,启动过程比较慢;不能做到根据需要来启动服务,比如通常希望插入U盘的时候,再启动USB控制的服务,这样可以更好的节省系统资源。

    为了解决系统服务的即插即用,UpStart应运而生,在CentOS6系统中,SysV init和UpStart是并存的,UpStart主要解决了服务的即插即用。服务顺序启动慢的问题,UpStart的解决办法是把相关的服务分组,组内的服务是顺序启动,组之间是并行启动。在CentOS6系统中,配置文件为/etc/inittab和/etc/init/*.conf。

    但是随着移动互联网的到来,SysV init服务启动慢的问题显得越来越突出,许多移动设备都是基于Linux内核,比如安卓。移动设备启动比较频繁,每次启动都要等待服务顺序启动,显然难以接受,systemd就是为了解决这个问题诞生的。在CentOS7中使用,其配置文件为/usr/lib/systemd/system/ 和 /etc/systemd/system/ 中的文件。

    systemd的设计思路是:尽可能的快速启动服务;尽可能的减少系统资源占用。

    systemd使用

    在CentOS7中,systemctl命令主要负责控制systemd系统和服务管理器。基本取代了service和chkconfig命令,虽然service和chkconfig命令依然保留,但是据说已经被阉割过。

    参考《Centos7下的systemctl命令与service和chkconfig》,整理常用命令如下:

    systemctl --version,查看版本。

    whereis systemctl,查看位置。

    systemctl list-unit-files,列出所有可用单元(服务)。

    systemctl list-units,列出所有运行中的单元。

    systemctl --failed,列出所有失败的单元。

    systemctl list-unit-files | grep enable,查看自启动的软件。

    systemctl is-enabled mysqld.service,查看某个单元是否开机启动。

    systemctl status mysqld.service,查看某个单元的状态。

    systemctl start mysqld.service,启动某个单元。

    systemctl restart mysqld.service,重启某个单元。

    systemctl stop mysqld.service,停止某个单元。

    systemctl daemon-reload,修改了某个单元的配置文件后,重载配置文件。

    systemctl reload mysqld.service,重载某个单元。

    systemctl enable mysqld.service,设置开机自启动。

    systemctl disable mysqld.service,关闭开机自启动。

    systemctl kill mysqld,杀死单元。

    nginx

    yum安装nginx

    参考《如何在CentOS 7上安装Nginx》,安装nginx,安装成功后使用systemctl命令设置自启动。

    手动安装nginx

    参考《Centos7安装Nginx实战》,安装步骤如下:

    1、安装gcc等编译环境

    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

    2、下载nginx1.12.0并解压

    wget http://nginx.org/download/nginx-1.12.0.tar.gz

    tar -xzvf nginx-1.12.0.tar.gz

    cd nginx-1.12.0

    3、创建目录

    mkdir-p /var/temp

    mkdir-p /var/temp/nginx

    mkdir-p /var/temp/run/nginx

    chmod a+wrx -R temp

    4、配置编译选项

    ./configure \

    --prefix=/usr/local/nginx \

    --pid-path=/var/temp/run/nginx/nginx.pid \

    --lock-path=/var/lock/nginx.lock \

    --error-log-path=/var/log/nginx/error.log \

    --http-log-path=/var/log/nginx/access.log \

    --with-http_gzip_static_module \

    --http-client-body-temp-path=/var/temp/nginx/client \

    --http-proxy-temp-path=/var/temp/nginx/proxy \

    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

    --http-scgi-temp-path=/var/temp/nginx/scgi

    切记,pid-path不能设置为/var/run/nginx/nginx.pid。因为CentOS每次重启后,都会删除/var/run目录中的自建目录和文件,从而导致nginx自启动失败。

    5、编译安装

    make && make install

    进入/usr/local/nginx查看文件是否存在conf、sbin、html文件夹,若存在则安装成功

    6、测试启动

    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

    如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件。

    7、测试访问

    curl localhost

    浏览器如果不能访问,就打开防火墙或者开端口。

    关闭防火墙,systemctl stop firewalld.service

    开放端口,firewall-cmd --zone=public --add-port=80/tcp --permanent,firewall-cmd --reload

    设置开机启动

    手动安装的nginx,该怎样设置开机自启动?参照《Nginx+Center OS 7.2 开机启动设置(转载)》,步骤如下:

    1、在系统服务目录里创建nginx.service文件

    vi /usr/lib/systemd/system/nginx.service

    2、写入内容如下:

    [Unit]

    Description=nginx

    After=network.target

    [Service]

    Type=forking

    ExecStart=/usr/local/nginx/sbin/nginx

    ExecReload=/usr/local/nginx/sbin/nginx -s reload

    ExecStop=/usr/local/nginx/sbin/nginx -s quit

    PrivateTmp=true

    [Install]

    WantedBy=multi-user.target

    [Unit]:服务的说明

    Description:描述服务

    After:描述服务类别

    [Service]服务运行参数的设置

    Type=forking是后台运行的形式

    ExecStart为服务的具体运行命令

    ExecReload为重启命令

    ExecStop为停止命令

    PrivateTmp=True表示给服务分配独立的临时空间

    注意:[Service]的启动、重启、停止命令全部要求使用绝对路径

    [Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

    3、设置开机自启动

    systemctl enable nginx.service

    4、查看nginx状态

    systemctl status nginx.service

    很奇怪,明明启动成功了,为什么显示Active: inactive (dead)?

    5、杀死nginx重启nginx

    pkill -9 nginx

    ps aux | grep nginx

    systemctl start nginx

    再次查看状态,变成了active,搞定。

    6、重启服务器

    reboot

    7、再次连接后,查看服务状态

    systemctl status nginx.service

    看到nginx已经启动,至此,nginx自启动配置成功。

    相关文章

      网友评论

          本文标题:CentOS7设置nginx开机自启动

          本文链接:https://www.haomeiwen.com/subject/nyhoohtx.html