SystemdSystemd(system daemon)实现系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销,最终替代init。 Systemd采用了一下新技术:
Systemd Unit学习Systemd的第一步,就是搞懂 Unit(单元)是什么? Unit就是Systemd的最小 功能/管理 单位,是单个进程的描述。一个个小的Unit相互调用和依赖,组成一个庞大的任务管理系统,这就是Systemd的基本思想。 由于Systemd要做到事情太多,导致Unit有很多种不同的类型:
所有的Unit文件都存放在 /usr/lib/systemd/system和/etc/systemd/system Service Unit
[Unit] 段的常用选项: Description:描述信息; 意义性描述; After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动;其功能与Before相反; Requies:依赖到的其它units;强依赖,被依赖的units无法激活时,当前unit即无法激活; Wants:依赖到的其它units;弱依赖; Conflicts:定义units间的冲突关系 [Service] 段的常用选项: Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型,其类型有: simple:默认值,执行ExecStart指定的命令,启动主进程 forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出 oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行 dbus:当前服务通过D-Bus启动 notify:当前服务启动完毕,会通知systemd再继续往下执行 idle:若有其他任务执行完毕,当前服务才会运行 EnvironmentFile:环境配置文件; ExecStart:指明启动unit要运行命令或脚本; ExecStartPre:在ExecStart之前运行; ExecStartPost:在ExecStart之后运行; ExecReload: 指明重新加载配置的命令或脚本; #示例 ExecReload=/bin/kill -HUP $MAINPID ExecStop:指明停止unit要运行的命令或脚本; Restart:当设定Restart=1时,则当次daemon服务意外终止后,会再次自动启动。 [Install] 段的常用选项: Alias:别名,可使用systemctl command Alias.service; RequiredBy:被哪些units所依赖; WantedBy:被哪些units所依赖 注意:对于新建或修改unit文件,需要通过命令 systemctl daemon-reload 重新加载。 Timer Unit
**定义Timer调用的my-timer.service **[Unit] Description = MyTimer [Service] ExecStart = /bin/echo '...Hello MyTimer...'**定义调用Service的my-timer.timer**[Unit] Description = Runs mytimer every minutes [Timer] OnUnitActiveSec = 1m Unit = mytimer.service [Install]WantedBy = multi-user.target # [Timer] 字段 OnActiveSec:定时器生效后,多少时间开始执行任务 Socket Unit
Target Unit
Systemd Command# 查看单元状态 ## active (running): 进程持续的运行中 ## active (exited): 进程成功完成一次执行 ## active (waiting): 进程等待中 ## inactive: 未运行 $ systemctl status [UnitName] # 查看是否已启用该单元 ## enable、disable或static ## static是指对应的Unit文件中没有定义[Install]区域,因此无法配置为开机启动服务。 $ systemctl is-enabled [UnitName] # 开机自动执行该单元 $ systemctl enable [UnitName] # 关闭开机自动执行 $ systemctl disable [UnitName] # 启动单元 $ systemctl start [UnitName] # 关闭单元 $ systemctl stop [UnitName] # 重启单元 $ systemctl restart [UnitName] # 重新加载服务配置,而不中断服务 $ systemctl reload [UnitName] # 类似于 nginx -s reload # 杀死单元进程 $ systemctl kill [UnitName] # 禁止服务,无法启动或开机启动 $ systemctl mask [UnitName] # List units that systemd currently has in memory. $ systemctl list-units # List unit files installed on the system, in combination with their enablement state (as reported by is-enabled). $ systemctl list-unit-files # Shows units required and wanted by the specified unit. $ systemctl list-dependencies Systemd 架构图Systemd官网翻译: |
|
来自: imnobody2001 > 《待分类》