service:代表一个后台服务进程,比如mysqld。这是常用的一类;
socket:此类配置单元封装系统和互联网中的一个套接字。当下,systemd支持流式、数据包和连续包的AF_INET、AF_INET6、AF_UNIX socket。每一个套接字配置单元都有一个相应的服务配置单元 。相应的服务在第一个"连接"进入套接字时就会启动(例如:nscd.socket 在有新连接后便启动 nscd.service)。
device :此类配置单元封装一个存在于 Linux 设备树中的设备。每一个使用 udev 规则标记的设备都将会在 systemd 中作为一个设备配置单元出现。
mount :此类配置单元封装文件系统结构层次中的一个挂载点。Systemd 将对这个挂载点进行监控和管理。比如可以在启动时自动将其挂载;可以在某些条件下自动卸载。Systemd 会将/etc/fstab 中的条目都转换为挂载点,并在开机时处理。
automount :此类配置单元封装系统结构层次中的一个自挂载点。每一个自挂载配置单元对应一个挂载配置单元 ,当该自动挂载点被访问时,systemd 执行挂载点中定义的挂载行为。
swap: 和挂载配置单元类似,交换配置单元用来管理交换分区。用户可以用交换配置单元来定义系统中的交换分区,可以让这些交换分区在启动时被激活。
target :此类配置单元为其他配置单元进行逻辑分组。它们本身实际上并不做什么,只是引用其他配置单元而已。这样便可以对配置单元做一个统一的控制。这样就可以实现大家都已经非常熟悉的运行级别概念。比如想让系统进入图形化模式,需要运行许多服务和配置命令,这些操作都由一个个的配置单元表示,将所有这些配置单元组合为一个目标(target),就表示需要将这些配置单元全部执行一遍以便进入目标所代表的系统运行状态。 (例如:multi-user.target 相当于在传统使用 SysV 的系统中运行级别 3)
timer:定时器配置单元用来定时触发用户定义的操作,这类配置单元取代了 atd、crond 等传统的定时服务。
snapshot :与 target 配置单元相似,快照是一组配置单元。它保存了系统当前的运行状态。
并发启动原理之一:解决 socket 依赖
并发启动原理之二:解决 D-Bus 依赖
并发启动原理之三:解决文件系统依赖
[root@kalaguiyin system]# cat/usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
#[unit]部分,描述信息
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
#[service]定义,ExecStartPre定义启动服务之前应该运行的命令;
#ExecStart 定义启动服务的具体命令行语法。
[Install]
WantedBy=multi-user.target
#[install]部分:WangtedBy表明这个服务是在多用户模式下所需要的。
[root@kalaguiyin system]# catmulti-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.servicerescue.target
AllowIsolate=yes
# Requires 定义表明 multi-user.target 启动的时候 basic.target 也必须被启动;另外 basic.target 停止的时# 候,multi-user.target 也必须停止。如果您接着查看 basic.target 文件,会发现它又指定了 sysinit.target 等# 其他的单元必须随之启动。同样 sysinit.target 也会包含其他的单元。采用这样的层层链接的结构,最终所# 有需要支持多用户模式的组件服务都会被初始化启动好。
[Install]
Alias=default.target
# Alias 定义,即定义本单元的别名,这样在运行 systemctl 的时候就可以使用这个别名来引用本单元。
[root@kalaguiyin system]# pwd
/etc/systemd/system
[root@kalaguiyin system]# ls
basic.target.wants display-manager.service
bluetooth.target.wants getty.target.wants
dbus-org.bluez.service graphical.target.wants
printer.target.wants sockets.target.wants
spice-vdagentd.target.wants default.target sysinit.target.wants default.target.wants
[root@kalaguiyin system]# cat
sys-kernel-debug.mount
[Unit]
Description=Debug File System
Documentation=https://www.kernel.org/doc/Documentation/filesystems/debugfs.txt
Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
DefaultDependencies=no
ConditionPathExists=/sys/kernel/debug
Before=sysinit.target
[Mount]
What=debugfs
Where=/sys/kernel/debug
Type=debugfs
启动服务
停止服务
重启服务
重载服务
systemctl reloadhttpd.service
条件式重启
systemctl condrestarthttpd.service
状态查看
systemctl statushttpd.service
列出可以启动或停止的服务列表。
systemctl list-unit-files –type=service
设置服务为开机启动
chkconfig httpd on
systemctl enablehttpd.service
取消服务开机启动;
systemctl disablehttpd.service
检查一个服务在当前环境下被配置为启用还是禁用。
systemctl is-enabledhttpd.service;echo $?
输出在各个运行级别下服务的启用和禁用情况
systemctl list-unit-files –type=service
列出某服务在哪些运行级别下启用和禁用。
ls /etc/lib/systemd/system/*.wants/httpd.service
改变用户运行级别:
systemctl isolatemulti-user.target
改变默认运行级别:
[root@kalaguiyinsystem]# systemctl set-default multi-user.target
rm'/etc/systemd/system/default.target'
ln -s'/usr/lib/systemd/system/multi-user.target''/etc/systemd/system/default.target'