linux配置nginx开机自启&nginx部署与systemctl控制启动&/etc/systemd/system 和 /lib/systemd/system 的区别

一、方法一

1.找到/etc/rc.local文件,在文件最后一行新增启动命令(nginx默认安装目录为:/usr/local/nginx):

/usr/local/nginx/sbin/nginx

二、方法二

1.进入/etc/systemd/system文件夹,新增文件 nginx.service
2.文件内容:

[Unit]
Description=nginx service
After=network.target

[Service]
User=root
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecStartPre=/bin/sleep 10

[Install]
WantedBy=multi-user.target

3.开启开机启动

systemctl enable nginx

/etc/systemd/system 和 /lib/systemd/system 的区别

在Linux操作系统中,特别是那些使用Systemd作为init系统的发行版,有两个重要的目录涉及到systemd服务单元文件的存储:

  1. /usr/lib/systemd/system

    • 这个目录用于存放由系统软件包安装的服务单元文件。这些文件是由软件包维护人员提供的,随着软件包的升级,可能会被自动更新或替换。
    • 不推荐用户直接编辑这个目录下的服务文件,因为更改可能在软件包升级期间丢失。
  2. /etc/systemd/system/

    • 这个目录用于存放用户自定义的服务单元文件。这些文件是由系统管理员根据自身需求定制的服务配置,不会受到软件包升级的影响。
    • 建议在此目录下存放自定义的服务单元文件,以便保留定制化配置。

这两个目录的关系是互补的,共同构成了systemd服务单元文件的基础。系统内建的服务通常位于/usr/lib/systemd/system,而自定义的服务则位于/etc/systemd/system

当systemd加载服务配置时,会优先查找/etc/systemd/system目录。如果在那里找不到对应的服务单元文件,才会回退到/usr/lib/systemd/system查找。这意味着,如果你在/etc/systemd/system放置了一个同名的服务单元文件,那么它会覆盖系统自带的服务配置。这种设计允许用户灵活地自定义和扩展系统功能。

另外要注意的是,当你编辑完/etc/systemd/system下的服务文件并准备启用新配置时,通常还需要运行systemctl daemon-reload来通知Systemd重新加载配置文件,然后才能使用systemctl start|stop|restart|enable|disable等命令来操作服务。

linux 系统中有很多的 system 目录,在平常使用中或者大量的博客中,常看到的有/etc/systemd/system、/lib/systemd/system 以及/usr/lib/systemd/system 等,这三者有什么样的关系呢,本文将三者的关系详细说明,后续使用不再混淆。

简介

目录/lib/systemd/system 以及/usr/lib/systemd/system 其实指向的是同一目录,在/目录下执行命令 ll 即可知:

[root@localhost /]# ll
total 28
lrwxrwxrwx.   1 root root    7 Jul  3 09:43 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Jul 19 12:04 boot
drwxr-xr-x.  19 root root 3080 Jul 19 04:03 dev
drwxr-xr-x.  76 root root 8192 Jul 19 20:07 etc
drwxr-xr-x.   4 root root   39 Jul 19 04:37 home
lrwxrwxrwx.   1 root root    7 Jul  3 09:43 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Jul  3 09:43 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.   3 root root   23 Jul  3 20:33 opt
dr-xr-xr-x. 118 root root    0 Jul 19 04:03 proc
dr-xr-x---.  10 root root 4096 Jul 20 06:31 root
drwxr-xr-x.  27 root root  760 Jul 19 16:00 run
lrwxrwxrwx.   1 root root    8 Jul  3 09:43 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root    0 Jul 19 04:03 sys
drwxrwxrwt.  10 root root 4096 Jul 20 03:37 tmp
drwxr-xr-x.  13 root root  155 Jul  3 09:43 usr
drwxr-xr-x.  21 root root 4096 Jul 19 13:34 var
  • [/usr]/lib/systemd/system/ 该目录中包含的是软件包安装的单元,也就是说通过 yum、dnf、rpm 等软件包管理命令管理的 systemd 单元文件,都放置在该目录下。
[/usr]/lib/systemd/system/
The expectation is that `/lib/systemd/system` is a directory that should only contain
 systemd unit files which were put there by the package manager (YUM/DNF/RPM/APT/etc).
  • /etc/systemd/system/(系统管理员安装的单元, 优先级更高)
Files in /etc/systemd/system are manually placed here by the operator of the system for
 ad-hoc software installations that are not in the form of a package. This would 
 include tarball type software installations or home grown scripts.

在一般的使用场景下,每一个 Unit(服务等) 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在这个目录。 systemctl enable 命令用于在上面两个目录之间,建立符号链接关系。

$ sudo systemctl enable [email protected]
# 等同于
$ sudo ln -s '/usr/lib/systemd/system/[email protected]' '/etc/systemd/system/multi-
user.target.wants/[email protected]'

如果配置文件里面设置了开机启动,systemctl enable 命令相当于激活开机启动。与之对应的,systemctl disable 命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。

$ sudo systemctl disable [email protected]

虽然在/etc/systemd/system/目录下放置的是系统管理员安装的单元,但是实际使用过程中,用户可以自定义服务配置文件,并且放置在该目录,将该服务的配置文件的优先级提高。

优先级

systemd 的使用大幅提高了系统服务的运行效率, 而 unit 的文件位置一般主要有三个目录:

Table 1.  Load path when running in system mode (--system).
┌────────────────────────┬─────────────────────────────┐
│Path                    │ Description                 │
├────────────────────────┼─────────────────────────────┤
│/etc/systemd/system     │ Local configuration         │
├────────────────────────┼─────────────────────────────┤
│/run/systemd/system     │ Runtime units               │
├────────────────────────┼─────────────────────────────┤
│/lib/systemd/system     │ Units of installed packages │
└────────────────────────┴─────────────────────────────┘

这三个目录的配置文件优先级依次从高到低,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。

系统安装时,默认会将 unit 文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如nginx.service,一般有两种方法:

  1. /etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置。
  2. /etc/systemd/system下面创建nginx.service.d目录,在这个目录里面新建任何以.conf 结尾的文件,然后写入我们自己的配置。推荐这种做法。

/run/systemd/system这个目录一般是进程在运行时动态创建 unit 文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即 Session 级别的,才在这里做修改。

附 systemd 介绍

服务设定位置:

  • /usr/lib/systemd/system/
  • /run/systemd/system/
  • /etc/systemd/system/(一般为连接文件)

服务统一管理:systemd

service 设定文件:

  • /usr/lib/systemd/system/*.service: 预设设定文件
  • /etc/systemd/system/system/*.service.d/: 用户个性化设定文件,会被加入设定
  • /etc/systemd/system/system/*.service.wants/: 连结文件,启动该服务后推荐启动的其他服务
  • /etc/systemd/system/system/*.service.requires/: 连结文件,启动该服务之前,需要预先启动的服务
  • /run/systemd/generator.late 使用 systemd-sysv-generator 工具处理 SysV init 脚本(即:/etc/init.d/*),自动生成.service 文件

nginx部署与systemctl控制启动

部署nginx

下载nginx

  • nginx下载地址
  • Stable version:最新稳定版,生产环境上建议使用的版本

安装nginx前置环境

  • yum install gcc-c++
  • yum install -y pcre pcre-devel
  • yum install -y zlib zlib-devel
  • yum install -y openssl openssl-devel

解压nginx安装包并编译

tar -xvf nginx-1.14.0.tar.gz  # 不要解压在/usr/local下
./configure && make && make install		#运行安装配置
/usr/local/nginx/sbin/nginx -t		 # 测试nginx安装是否成功
# 安装成功后nginx的目录为/usr/local/nginx下	
conf/nginx.conf         #nginx 配置文件  
sbin/nginx              #nginx 启动文件  
sbin/nginx -s reload    #nginx 重启命令  

配置systemctl 启动

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

[Unit]                                                          #对服务的说明
Description=nginx - high performance web server                 #描述服务
After=network.target remote-fs.target nss-lookup.target         #描述服务类别

[Service]                                                       #服务的一些具体运行参数的设置
Type=forking                                                    #后台运行的形式
PIDFile=/usr/local/nginx/logs/nginx.pid                         #PID文件的路径
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf     #启动准备
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf           #启动命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload                                    #重启命令
ExecStop=/usr/local/nginx/sbin/nginx -s stop                                        #停止命令
ExecQuit=/usr/local/nginx/sbin/nginx -s quit                                        #快速停止
PrivateTmp=true                                                                     #给服务分配临时空间

[Install]
WantedBy=multi-user.target                                                          #服务用户的模式

#在启动服务之前,需要先重载systemctl命令
systemctl daemon-reload
systemctl start nginx.service

查看nginx的启动状态

[root@localhost conf]#  systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 二 2023-05-09 11:26:32 CST; 5s ago
  Process: 57306 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
  Process: 57303 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 57309 (nginx)
    Tasks: 2
   Memory: 968.0K
   CGroup: /system.slice/nginx.service
           ├─57309 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
           └─57310 nginx: worker process

509 11:26:32 localhost.localdomain systemd[1]: Starting nginx - high performance web server...
509 11:26:32 localhost.localdomain nginx[57303]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
509 11:26:32 localhost.localdomain nginx[57303]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
509 11:26:32 localhost.localdomain systemd[1]: Started nginx - high performance web server.

猜你喜欢

转载自blog.csdn.net/qq_43842093/article/details/135026446