1.什么是daemon?
简单来说daemon就是服务service.有一些服务会加一个d。比如crond,atd服务后面都有一个d,是表示....daemon的意思。
2.systemd使用的Unit分类。
.service 一般类型的服务,主要是系统服务,这也是最常见的服务。
.socket 内部程序的数据交换socket服务。主要进行本机的程序数据交换操作。
.target 执行环境类型,比如:multi-user.target。
.mount 系统文件挂载的相关服务,比如一些自动挂载的文件系统的服务。
.automount 系统文件挂载的相关服务,比如一些自动挂载的文件系统的服务。
.path 检测特定的文件或者目录类型。
.timer 循环执行的服务。有一点向anarcrontab。这是由systemd主动提共的。
3.通过systemctl来管理服务。
比如对服务atd.service 来进行systemctl操作。
1.开始特定的服务命令。
命令:systemctl start atd.service
systemctl start atd.service
2.查看服务的状态。
命令:systemctl status atd.service
systemctl status atd.service
3.停止特定的服务。
命令:systemctl stop atd.service
systemctl stop atd.service
4.重新启动特定的服务。
命令:systemctl restart atd.service
systemctl restart atd.service
5.允许服务开机启动。
命令:systemctl enable atd.service
systemctl enable atd.service
6.不允许服务开机启动。
命令:systemctl disable atd.service
systemctl disable atd.service
4.通过systemctl查看系统的所有服务
1.查看系统的所有服务
输入命令:systemclt查看系统的所有的服务
systemclt
2.查看已经安装的unit服务。
输入命令:systemctl list-unit-files
systemctl list-unit-files
3.显示指定类型的unit服务。
输入命令:systemctl list-units --type=service
systemctl list-units --type=service
5.通过systemctl管理不同的操作环境。
1.我们有哪一些操作环境?
通过命令:systemctl list-units --type=target --all 查看有那些系统环境。
systemctl list-units --type=target --all
2.查看系统的操作环境。
命令:systemctl get-default 查看当前的操作环境。
systemctl get-default
这里显示的是图形化操作环境。
这里显示的是多用户字符界面环境。
3.设置默认的操作环境。
这里设置multi-user.target环境。
命令:systemctl set-default multi-user.target 设置multi-user.target环境。
systemctl set-default multi-user.target
开机后就会发现是多用户字符界面。
命令:systemctl set-default multi-user.target 设置multi-user.target环境。
开机后就会发现是图形化界面。
6.通过systemctl分析各个服务之间的依赖。
1.使用命令查看一个服务的依赖
命令:sudo systemctl list-dependencies atd.service 查看atd服务依赖那些服务。
sudo systemctl list-dependencies atd.service
2.使用命令查看整个系统的服务依赖
命令:systemctl list-dependencies 查看系统服务之间的依赖。
systemctl list-dependencies
3.查看有什么服务依赖这个服务。
命令:systemclt list-dependencies atd.service --reverse 查看依赖atd服务的服务有那些。
systemclt list-dependencies atd.service --reverse
7.与systemd的 daemon运行过程中相关文件目录介绍。
文件:/usr/lib/systemd/system /
安装软件后,默认的启动脚本都在这个目录下,这里的数据最好不要修改。
文件:/run/systemd/system/
系统执行过程中产生的服务脚本,这些脚本的优先级比文件目录:/usr/lib/systemd/system要高。
文件:/etc/systemd/system/
根据需求编写的执行脚本,就比如自己写的一些服务。
文件:/etc/sysconfig/*
所有服务的初始化的一些选项设置都在这个文件目录下面。
文件:/var/lib
一些会产生数据的服务都会将数据写到这个目录下面。
文件:/run
存放了许多的daemon的缓存。
8.systemclt针对service类型的配置文件。
1.systemctl配置文件的设置项目简介。
比如查看atd.service的服务编写如下:
命令:cat /usr/lib/systemd/system/atd.service 查看atd.service 的配置文件。
cat /usr/lib/systemd/system/atd.service
配置文件说明:
[Unit]
unit本身的说明,以及其他依赖daemon的设置,包括在什么时候启动此unit之类的设置。
设置参数如下:
Description :
当我们使用systemctl list-units的时候,会输出一些管理员看的简易说明,这些说明就是写在Description后面的。
Documentation :
主要提供文件查询功能,比如:
Documentation=systemd - ArchWiki
After :
说明此unit在哪个daemon启动之后才会启动的意思。
Before :
与After相反
Requires :
设置此unit的依赖服务(daemon)
Wants :
设置此unit的依赖服务(daemon),但又不是必须需要的服务。
Conflicts :
代表冲突的服务。
[Service][Socket][Timer][Mount][Path]
设置参数如下:
Type :
说明daemon的启动方式有如下几种类型:
simple:默认启动,这个daemon主要由ExecStart接命令启动,启动后放在内存中。
forking:复制启动,由ExecStart启动的程序通过spawns扩展出其他的子程序来作为此daemon的主要服务,原始的父进程在启动后就会终止。
oneshot:和simple类似,但启动后直接结束,不会继续放在内存中。
dbus:与simple类型,但启动后必须要获取到一个D-Bus名称后才会继续运行。
idle:与simple类似,但是启动这个daemon必须要所有的工作都顺利执行完毕后才会执行。
EnviromentFile :
可以指定启动脚本的环境配置文件。
ExecStart :
就是实际启动此daemon的命令或者脚本程序的位置。
ExecStartPre :
ExecStart启动之前的一些操作命令或者是脚本程序的位置。
ExecStartPost :
ExecStart启动之后的一些操作命令或者是脚本程序的位置。
ExecStop :
与systemctl stop 之后的一些命令或者操作脚本位置。
ExecReload :
与systemctl reload 后的一些命令或者操作脚本位置。
Restart :
当设置Restart = 1 的时候,当此daemon关闭以后又会重新启动此服务,除非强制终止。
RemainAfterExit :
当设置RemainAfterExit = 1 的时候,当这个aemon关闭以后,此服务会再次尝试启动,对Type=oneshot很有用。
TimeoutSec :
如果因为某些错误无法顺利运行,经过多少秒才能进入强制结束。
KillMode :
process 终止ExecStart后面的命令的进程。
control-group 终止此服务产生的所有子进程。
none 此服务没有进程会被关闭。
RestartSec :
表示睡眠多长时间重新启动。默认是100ms
不同的unit类型有不同的设置项目,比如我们使用的atd.service 来当做模板,所以这边应该设置成Service。
这个项目主要用来规范服务启动的脚本,环境变量,重新启动等。
[Install]
设置的参数如下:
WantedBy :
表示依附于哪个target,后面一般设置成* .target 比如设置成multi-user.target
Also :
当前unit本身被enable时,Also后面的unit也会被enable的意思。
Alias :
运行一个链接的别名的意思。
表示此项目安装的哪个target里面。
9.自己制作一个服务(daemon)
1.在自己本地新建一个welcome.sh文件
2.输入如下内容。
3.设置可执行权限。
4.编写一个服务在/etc/systemd/system/welcome.service
5.输入如下内容。
6.重新加载服务
命令:systemctl daemon-reload
7.开始welcome.service 服务。
8.查看welcome.service的服务状态。
9.查看服务运行的结果。
成功完成自己做的服务。