Systemctl 学习笔记(不定期更新中)

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

实际操作:

  1. 我们先查看是否有安装服务(有则会出现下面类似的信息)
[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)
  1. 若无vsftpd可能是没下载,输入下面这个指令可以联网安装
[binwatson@study etc]$ sudo yum install vsftpd
  1. 为了形成对比,我们开启两个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
  1. 修改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服务
  1. 重载服务
[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表示两个服务都已经开启
  1. 输入 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中,`就能帮我们解决依赖性问题了。

猜你喜欢

转载自blog.csdn.net/Bin_Watson/article/details/113662865