【linux】Systemd
守护进程(服务)
Linux 中的服务是一类常驻内存的进程,这类进程启动后在后台不断运行,通常为监听某个端口,负责一些系统提供的功能来服务用户,例如 ssh、nginx、MySQL 等都属于服务,这类进程被成为守护进程(daemon)。
Linux 的启动进程
操作系统在加载完系统内核之后,进入系统初始化阶段,在之前都是采用 init 进程,从 Centos7 开始使用 Systemd。systemd 即 system daemon 为系统的启动和管理提供了一套完整的解决方案。
1 | /etc/init.d 是 sysVinit 服务的启动方式,一些古老的系统使用这个; |
init 进行通过下面命令启动
1 | sudo /etc/init.d/nginx start |
这种方法有两个缺点。
一是启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程;
二是启动脚本复杂。init 进程只是执行启动脚本,启动脚本需要适应处理各种情况。
systemd 是一个系统管理守护进程、工具和库的集合,克服了 sysvinit 固有缺点,提高了系统启动速度。
Systemd 功能强大,但体系庞大,结构复杂。
Systemd
Systemd 是第一个用户空间程序,属于应用程序,不属于 Linux 内核范畴,这个进程的 PID 为 1。
可以使用命令 ps ax | grep systemd
查看进程,如下图。
可知该进程的 PID 为 1,路径是/usr/lib/systemd/systemd
基本命令
-
开机启动
对于支持 systemd 的程序,在安装时会在 /usr/lib/systemd/system 目录中添加一项配置文件
执行
sudo systemctl enable service_name
会在 /etc/systemd/system 目录中添加一个符号链接,指向/usr/lib/systemd/system 中的配置文件。开机时,Systemd 只执行 /etc/systemd/system 目录中的配置文件
-
启动服务
1
sudo systemctl start service_name
执行上面命令可以立即启动服务,利用
systemctl status
可以查看服务的状态。 -
停止服务
1
2
3
4
5sudo systemctl stop service_name
# 如果没有停下来,就需要"杀进程"
sudo systemctl kill service_name
# 重启服务
sudo systemctl restart service_name