Linux 守护进程和控制服务

systemd简介

Linux系统和服务进程由systemd系统和服务管理器进行管理,它提供了一种方式可以在启动时和运行中的系统上激活系统资源、Web守护进程和其他进程。

一般情况下,守护进程在系统启动时自动开启并持续维护服务运行,直到服务器关机或手动停止。通常来说,守护进程的进程名以d命名结尾。

systemctl简介

systemctl命令用于管理各种类型的systemd对象,他们称之为单元。使用systemctl命令可以对单元进行状态的管理,比如运行、停止运行、设置为开机启动等。

比较重要的一个单元类型是服务单元,服务单元通常的拓展名为.service,代表系统服务。这种单元用于启动经常访问的守护进程,如NginxWeb服务器。还有其他单元类型,如socket套接字单元、path路径单元等。

查询服务状态

使用systemctl status name[.type]来查询服务状态。如果未提供单元类型(type),则默认为service服务单元。(如果该服务单元存在的话~)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
systemctl status sshd.service   #查看ssh服务器守护进程的状态
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-01-31 10:38:57 CST; 3h 15min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1572 (sshd)
Tasks: 1 (limit: 49169)
Memory: 7.7M
CGroup: /system.slice/sshd.service
└─1572 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc -oMACs=hmac-sh>
Jan 31 11:32:15 centos8 sshd[4221]: Accepted password for yourname from 192.168.1.157 port 44876 ssh2
Jan 31 11:32:15 centos8 sshd[4221]: pam_unix(sshd:session): session opened for user yourname by (uid=0)
Jan 31 11:32:27 centos8 sshd[4307]: Accepted password for yourname from 192.168.1.157 port 44900 ssh2

status.png

在上面的状态中找到几个关键词:

关键词 描述
loaded 单元配置文件已受理
enabled 在系统启动时自动运行
disabled 在启动运行时不会自动启动
active(running) 正在通过一个或多个进程持续运行中
active(exited) 已经成功完成一次性的任务并结束守护
active(waiting) 运行中,但正在等待事件发生…
inactive 进程没有运行

控制系统服务

停止服务并检查服务状态

1
2
systemctl stop sshd.service
systemctl status sshd.service

启动服务并检查服务状态

1
2
systemctl start sshd.service
systemctl status sshd.service

重启服务实现对服务的停止和启动

1
2
systemctl restart sshd.service
systemctl status sshd.service

发出指令使服务在不停止或重启的情况下重新加载其配置文件

如果对服务的配置文件进行了修改,不想对服务关闭影响业务的情况下使用reload选项来让服务对配置文件重新读取并加载。

1
2
systemctl reload sshd.service
systemctl status sshd.service

屏蔽系统服务

有些时候,系统中可能安装了相互冲突的服务,比如防火墙iptablesfirewalld。为了防止管理员意外的启动两个服务可以将服务进行屏蔽。屏蔽服务将在配置文件目录中创建软连接,将其服务指向/dev/null设备文件,这样不小心启动了冲突的服务也不会出现有什么刺激的事情发生!

1
2
systemctl mask sshd.service # 屏蔽ssh服务器守护进程
Created symlink /etc/systemd/system/sshd.service → /dev/null.
1
2
systemctl start sshd.service # 屏蔽后尝试启动
Failed to start sshd.service: Unit sshd.service is masked. # 提示服务单元被屏蔽,无法启动。
1
2
systemctl unmask sshd.service # 解除屏蔽ssh服务器守护进程
Removed /etc/systemd/system/sshd.service.

使守护进程在系统启动时自动启动和停止

在使用systemctl对一个守护进程启动或停止,不能保证其下一次系统运行时也是启动或停止的状态。当相应的systemd配置目录中创建了软连接时,服务会随着系统启动的时候启动。软连接可以通过systemctl命令创建和删除。

首先要查看服务状态,如果关键词出现disabled证明这个服务在系统启动时不会随着系统一起启动,否则相反。

1
2
3
systemctl enable sshd.service   # 设置软连接,使得该服务随系统启动时启动。
systemctl is-enabled sshd.service # 验证状态,返回为`enabled`为开启自动启动,`disabled`为不会开机自动启动。
enabled
1
2
3
systemctl disable sshd.service   # 删除软连接,使得该服务不会随系统启动时启动。
systemctl is-enabled sshd.service # 验证状态,返回为`enabled`为开启自动启动,`disabled`为不会开机自动启动。
disabled