systemctl 配置文件目录以及作用
目录 | 功能 |
---|---|
/usr/lib/systemd/system | 存放实际执行systemd启动脚本配置文件。使用centos官方提供的软件安装完后,默认是放在这个目录里面的。 |
/run/systemd/system | 系统执行过程中所产生的服务脚本 |
/etc/systemd/system | 管理员根据系统需要所建立的执行脚本。Red Hat官方建议,如果需要修改服务(指/usr/systemd/system里面的服务)的配置,可以修改的该目录下。(这里一般存放的是Linux系统里面用户自定义的服务) |
/etc/xxx | 在/etc/中例如,vsftpd这个服务会有一个在/etc/vsftpd/的目录,在该目录下面,会存放属于vsftpd这个服务的配置信息。除此之外,很多其它系统服务都会将配置文件放在/etc/xxx/下面。这个不同于上面的/etc/system/systemd,这里一般是系统的服务,例如:ssh, firewalld, httpd, vsftpd 等 |
/var/lib/ | 一些服务产生的数据会写在这个目录中,例如MariaDB数据库管理系统,的默认数据库建设写入 /var/lib/mysql 这个目录里面 |
举个例子:
如果我们需要修改FTP服务的配置
在 "/usr/lib/systemd/system/" 中存放着FTP服务的默认配置文件
"vsftpd.service"我们可以在 "/etc/systemd/system/" 里建立与配
置相同文件名的'目录',然后加上".d" 扩展名,就是"vsftpd.service.d",
然后在该目录下建立配置文件即可,
例如:"custom.conf"(这里conf是推荐使用的扩展名)
最终形成:"/etc/systemd/system/vsftpd.service.d/custom.conf" 在这个路径下
面的自定义配置文件。
(这种配置方式只是Red Hat推荐使用的,也可以直接修改/usr/systemd/system里面
的配置)
上面可以通过修改/etc目录里面的配置,进而影响/usr里面的配置,是因为/etc/的优先
级高于/usr的优先级。具体来说上面的三个文件的优先级是:etc > run > usr
实际操作:
- 我们先查看是否有安装服务(有则会出现下面类似的信息)
[binwatson@study etc]$ systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
- 若无vsftpd可能是没下载,输入下面这个指令可以联网安装
[binwatson@study etc]$ sudo yum install vsftpd
- 为了形成对比,我们开启两个vsftpd服务,一个是系统默认的vsftpd服务,另一个是我们自己配置的vsftpd服务,我们把后者命名为vsftpd2
// 这里把/etc里面的vsftpd复制一份,是因为我们要开启第二个vsftpd服务,它需要
// 在/etc里面也有一个配置文件
[binwatson@study vsftpd]$ cd /etc/vsftpd/
[binwatson@study vsftpd]$ sudo cp vsftpd.conf vsftpd2.conf
[binwatson@study vsftpd]$ ls
ftpusers user_list vsftpd2.conf vsftpd.conf vsftpd_conf_migrate.sh
// 我们用vim在vftpd2后面加上一个"listen_port=5555"这样vsftpd2服务启动时就会
// 用我们指定的端口
[binwatson@study vsftpd]$ sudo vim vsftpd2.conf
[binwatson@study vsftpd]$ sudo diff vsftpd2.conf vsftpd.conf
129d128
< listen_port=5555
- 修改vsftpd2的/usr 里的配置文件。这里我把vsftpd2.service复制到了system目录下面,而没有放在vsftpd2.service.d下面,因为只有一个配置文件,所以这样也可以。".d" 一般代表一个目录,就是说改目录下有很多service的配置文件。
[binwatson@study vsftpd]$ cd /etc/systemd/system/
[binwatson@study system]$ sudo cp /usr/lib/systemd/system/vsftpd.service vsftpd2.service
[binwatson@study system]$ ls vsftpd2.service
vsftpd2.service
[binwatson@study system]$ sudo vim vsftpd2.service
1 [Unit]
2 Description=Vsftpd ftp daemon
3 After=network.target
4
5 [Service]
6 Type=forking
7 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf //修改了这里
8
9 [Install]
10 WantedBy=multi-user.target
这里解释一下上面的
ExecStart:就是实际执行服务(daemon)的命名或脚本程序的位置。
所以这里表示使用vsftpd程序,启动配置是vsftpd2的配置,这样就可以启动一个端口号
为5555的FTP服务
- 重载服务
[binwatson@study system]$ systemctl daemon-reload // 重载服务
[binwatson@study system]$ systemctl list-unit-files --all | grep vsftpd
vsftpd.service disabled
vsftpd2.service disabled
[email protected] disabled
vsftpd.target disabled
下面我们看到两个服务都还没打开
[binwatson@study system]$ systemctl status vsftpd2.service vsftpd.service
● vsftpd2.service - Vsftpd ftp daemon
Loaded: loaded (/etc/systemd/system/vsftpd2.service; disabled; vendor preset: disabled)
Active: inactive (dead)
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
开启服务(这里用的是systemctl start 也可以使用restart,就不解释了)
[binwatson@study system]$ systemctl start vsftpd2.service vsftpd.service
[binwatson@study system]$ systemctl status vsftpd2.service vsftpd.service
● vsftpd2.service - Vsftpd ftp daemon
Loaded: loaded (/etc/systemd/system/vsftpd2.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-02-04 20:47:35 CST; 1s ago
Process: 15175 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf (code=exited, status=0/SUCCESS)
Main PID: 15177 (vsftpd)
Tasks: 1
CGroup: /system.slice/vsftpd2.service
└─15177 /usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf
Feb 04 20:47:35 study.centos7.binwatson systemd[1]: Starting Vsftpd ftp daemon...
Feb 04 20:47:35 study.centos7.binwatson systemd[1]: Started Vsftpd ftp daemon.
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-02-04 20:47:35 CST; 1s ago
Process: 15179 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 15181 (vsftpd)
Tasks: 1
CGroup: /system.slice/vsftpd.service
└─15181 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Feb 04 20:47:35 study.centos7.binwatson systemd[1]: Starting Vsftpd ftp daemon...
Feb 04 20:47:35 study.centos7.binwatson systemd[1]: Started Vsftpd ftp daemon.
// 上面active表示两个服务都已经开启
- 输入
sudo netstat -tnpl
上面我们可以看到开启了两个vsftpd服务,分别在5555和21端口。
自此我们就开启了两个vsftpd服务,在开启第二个vsftpd服务时,我们修改了两个地方,一个是/etc/vsftpd
里面的conf文件,这里本来是不用修改的,因为我们要开启一个新vsftpd2服务,所以修改了这里,毕竟两个服务不能用同一个端口号。而平时修改服务配置的时候,我们也不需要修改服务的端口号。另一个地方是/etc/systemd/system
这里也是本节一开始提到的地方,我们通过复制/usr/lib/systemd/system
里面的service自定义了我们的service
就是里面的ExecStart=
通过它我们可以修改一个服务的配置。当然,我们可以指定的不仅仅是ExecStart=
。
// vsftpd2.service
1 [Unit]
2 Description=Vsftpd ftp daemon
3 After=network.target
4
5 [Service]
6 Type=forking
7 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf //修改了这里
8
9 [Install]
10 WantedBy=multi-user.target
回到vsftpd2.service这个文件中,我们可以看到有[Unit]和[Service],以及[Install]这些东西类型。
Unit | 其实就是在什么服务之后才启动此Unit的意思。Unit在在Linux中被定义为“服务单元”之意。例如上面的After=network.target 就是说,在这个network.target 启动后才能启动这个服务。target 是一群unit的合集,可以理解成一堆服务(Units)组成的一个服务群。这个[Unit] 下面的配置主要可以解决服务的依赖性问题。 |
Service | 这个主要用来规范服务启动的脚本、环境配置文件名、重新启动的方式等。如,我们在上面中重新配置服务启动配置文件,修改了端口号。 |
Install | 是将我们要启动的这个服务装到某个target集合中去的意思 |
systemctl有啥用?
在/usr/systemd/system
中的配置文件,可以理解成是使用systemctl
这个命令,执行脚本文件时,的配置文件。在vsftpd
这服务中我们本质上是执行,/usr/sbin/vsftpd
这个应用程序程序,而systemctl
只不过是管理它,从上面的[Unit]
我们知道,在启动某个服务之前可能需要启动其它服务,就是说服务之间可能会存在依赖性,只凭我们自己人为去启动服务,可能会理不清各种依赖性问题,而使用systemctl
将依赖性配置在conf
中,`就能帮我们解决依赖性问题了。