在这之前 ,对与linux 的系统中的很多管理已经有意无意的用到了systemd,但是没有系统的学习.昨天花了一点时间系统的了解了,systemd的一些功能并做了简单的测试.systemd一直广受争议.其中是非曲直甚多,不作评述,但是本人觉得撇开这些不谈,systemd本身还是很好用的一个东西.
systemd是系统内核加载后的第一个进程,其pid为1,它负责启动其他的所有的进程.我们通过pstree命令可以看出来.它管理linux系统的所有资源,包括service dev timer path mount等等,这也是它广受争议的地方.systemd把系统的每一个资源用一个unit来标记.也就是说一个系统的资源就是一个unit. 多个unit可以组成target,target是unit的打包集合.因此,若干系统启动项打包到一起,就组成了系统的运行级别,也就是之前的runlevel. 在systemd中,这写分别对应到graphcial.target, multiuser.target等等上去了.所有我们要将某个服务项设置为开机启动,我们只需要在对应的target包中添加服务项就可以了.但是通常不是直接添加,而是通过
systemctl enable <服务>
指令,这会在对应(此处的对应会在服务项的配置文件中声明)的运行target中添加一个软链接.
或者我们可以通过
systemctl start[stop restart status] <服务>
来即时启动/停止/重启/状态查询 一个服务项.
也可以通过
systemctl enable[disable] <服务名>
来配置一个服务是否开机启动,如果配置成enable,那么systemd会根据<服务名>文件中的[Install] 字段,在相应的启动target中创建软连接指向该服务.
我们可以自己编写服务项.最常用的是编写.service 和.timer. 编写的方式网上其他教程很多,但是这里我需要说明的一点是: systemd不支持"> >> < << | "等重定向和管道符,这是我测试的时候踩坑的地方.另外,[Service]字段中的Type如果不是oneshot类型,那么ExecStart的参数有且仅能有一个命令.
官网的英文参考手册倒是很可靠,但是看着麻烦,这里有一个中译版本,可以参考.
网友评论