一、方法一
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服务单元文件的存储:
-
/usr/lib/systemd/system
- 这个目录用于存放由系统软件包安装的服务单元文件。这些文件是由软件包维护人员提供的,随着软件包的升级,可能会被自动更新或替换。
- 不推荐用户直接编辑这个目录下的服务文件,因为更改可能在软件包升级期间丢失。
-
/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 clamd@scan.service
# 等同于
$ sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-
user.target.wants/clamd@scan.service'
如果配置文件里面设置了开机启动,systemctl enable 命令相当于激活开机启动。与之对应的,systemctl disable 命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。
$ sudo systemctl disable clamd@scan.service
虽然在/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
,一般有两种方法:
- 在
/etc/systemd/system
目录下创建nginx.service
文件,里面写上我们自己的配置。 - 在
/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
5月 09 11:26:32 localhost.localdomain systemd[1]: Starting nginx - high performance web server...
5月 09 11:26:32 localhost.localdomain nginx[57303]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
5月 09 11:26:32 localhost.localdomain nginx[57303]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
5月 09 11:26:32 localhost.localdomain systemd[1]: Started nginx - high performance web server.