Services Systemd Systemclt
区别
Service
历史上,Linux 的启动一直采用init进程。
下面的命令用来启动服务。
1 | $ sudo /etc/init.d/apache2 start |
这种方法有两个缺点。
一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
Systemd
Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。
使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反”keep simple, keep stupid”的Unix 哲学。
systemctl
systemctl是 Systemd 的主命令,用于管理系统。
systemctl - Control the systemd system and service manager
1 | systemctl is-enabled servicename.service #查询服务是否开机启动 |
开机启动原理
Systemd 默认从目录/etc/systemd/system/
读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/
,真正的配置文件存放在那个目录。
systemctl enable
命令用于在上面两个目录之间,建立符号链接关系。
1 | $ sudo systemctl enable [email protected] |
如果配置文件里面设置了开机启动,systemctl enable
命令相当于激活开机启动。
与之对应的,systemctl disable
命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。
1 | > $ sudo systemctl disable [email protected] |
配置文件的后缀名,就是该 Unit 的种类,比如sshd.socket
。如果省略,Systemd 默认后缀名为.service
,所以sshd
会被理解成sshd.service
。
实例
问题
1 | $ systemctl reload webhook.service |
Simple 类型不能reload
参考文献
https://blog.csdn.net/qq_40741855/article/details/104984071
https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
Services Systemd Systemclt
http://icarus.shaojiemike.top/2023/05/11/Work/software/linux-sys/services/