systemd的简明介绍及日常使用
systemd的简明介绍及日常使用
从设计构思上说,由于systemd使用了cgroup与fanotify等组件以实现其特性,所以只适用于Linux。有鉴于此,考虑到kFreeBSD分支的软件源无法纳入systemd,为与其他分支保持一致,Debian开发者尽力避免纳入systemd。但Lennart Poettering本人对此并不在意,并称“Debian GNU/kFreeBSD不过是玩具系统”。但Debain 8.0 Jessie开始以systemd取代sysvinit。
quote from Wikipedia
维基百科上的这段小故事真的是很有意思,
人类社会的就是由一小撮螳臂挡车的
不对,不对,窜台了
人类社会的就是由一小撮天才不断的单点突破,扛起旗帜,带领人类前行的。在IT领域,特别是软件领域,尤其如此。salute to Lennart Poettering.
systemd是一个用于Linux操作系统的系统和服务管理器。systemd的unit概念提供了一种统一的方式来管理和配置系统资源。unit的类型种类其实不少,有将近10种。本文只讲一下Service和Target,其他的平常用的比较少。
Service
Service Units(服务单元):用于定义和管理系统服务。
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/path/to/my-service-command
User=myuser
Group=mygroup
WorkingDirectory=/path/to/working/directory
Environment="VAR1=example" "VAR2=123"
ExecStartPre=/path/to/pre-start-script
ExecStartPost=/path/to/post-start-script
ExecStop=/path/to/stop-script
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=default.target
配置解释:
[Unit]:
Description:描述服务的文本信息。
After:指定服务应该在哪些其他单元(例如 network.target)之后启动。
[Service]:
Type:指定服务的类型,常见的类型包括 simple、forking、oneshot 和 notify。
ExecStart:指定要启动的服务命令或脚本的路径。
User 和 Group:指定运行服务的用户和用户组。
WorkingDirectory:指定服务的工作目录。
Environment:定义服务的环境变量,以空格分隔多个键值对。
ExecStartPre 和 ExecStartPost:定义在启动服务之前和之后要执行的脚本或命令。
ExecStop:指定停止服务时要执行的脚本或命令。
Restart 和 RestartSec:定义服务在遇到错误或意外终止时的重启行为,以及重启之间的等待时间间隔。
[Install]:
WantedBy:指定服务在哪个目标单元(例如 default.target)之下启动。
在实际配置中,还可以使用其他配置选项,如 ExecReload(定义重载配置时要执行的命令)和 LimitNPROC(限制服务的进程数)等。完成配置后,将其保存为 your-service-name.service,并将其放置在 /etc/systemd/system/ 目录下。
systemctl常用命令
systemctl start service_name
systemctl stop service_name
systemctl restart service_name
systemctl status service_name
systemctl enable service_name
systemctl disable service_name
查看所有已启动的服务列表:systemctl list-units --type service
查看所有的服务:systemctl list-units --type service --all
查看开机自启的服务情况:systemctl list-unit-files --type service
Target
Target Units:用于模拟实现运行级别(runlevel),0-6级。
init 0 # 切换到运行级别 0(关机)
init 1 # 切换到运行级别 1(单用户模式)
init 2 # 切换到运行级别 2(多用户模式,无网络支持)
init 3 # 切换到运行级别 3(多用户文本模式)
init 4 # 切换到运行级别 4(保留)
init 5 # 切换到运行级别 5(多用户图形模式)
init 6 # 切换到运行级别 6(系统重启)
在systemd中发生了转化:
0:runlevel0.target,poweroff.target
1:runlevel1.target,rescue.target
2-4:runlevel2-4.target,multi-user.target
5:runlevel5.target,graphical.target
6:runlevel6.target,reboot.target
如何使用systemctl操作?
级别切换:
init N >> systemctl isolate name.target
查看目前级别:
runlevel >> systemctl list-units --type=target --state=active
获取默认运行级别:
/etc/inittab >> systemctl get-default
修改默认级别:
/etc/inittab >> systemctl set-default name.target