Systemd 取代initd, 用来管理系统, 管理服务. d 是daemon 守护进程

# 两者常见命令示例

Systemd
	systemctl restart serverName.service
initd
	service serverName restart

Systemd 是一组命令的总称

systemctl, 管理系统和服务的核心命令

systemd-analyze, 查看启动耗时

hostnamectl, 查看当前主机信息

localectl, 本地化相关的设置(语言什么的)

timedatectl, 时区相关设置

loginctl, 查看当前登陆的用户

journalctl, 日志管理

Systemd 把所有系统资源划分为12种 Unit (单元)

此处只讨论Service unit

systemctl 命令 name.service
# 命令: start/stop/restart/kill/reload etc.

Systemd 配置文件与开机启动

systemd 从/etc/systemd/system/ 读取配置文件的符号链接

/usr/lib/systemd/system/ 存放配置文件

如果有符号链接, 表示开机启动

# 开机启动
systemctl enable [email protected]
# 等同于
ln -s '/usr/lib/systemd/system/[email protected]' '/etc/systemd/system/multi-user.target.wants/[email protected]'

# 取消开机启动
systemctl disable [email protected]

# 查看配置文件内容
systemctl cat name.service

Systemd 日志管理

所有Systemd 统一管理, journalctl

systemctl status xx.service 友好的多

# 最后20行
journalctl -n 20

# 实时显示最新
journalctl -f

# 查看某个服务的日志
journalctl -u caddy.service
	# -u 指定单元, 某一类资源, unit
# 对结果日志结果操作的参数要放在最后面
journalctl -u caddy.service --since today
journalctl -u caddy.service -n 20
journalctl -u caddy.service -f
	# -e 翻到最后一页, end
	# -f 实时更新, follow

Systemd 重启

https://unix.stackexchange.com/questions/419374/can-i-restart-systemd-without-rebooting

# 有时候频繁重启服务后会导致Systemd 出毛病
# 比如 systemctl restart caddy.service
Apr 07 07:27:36 li1703-32 systemd[1]: caddy.service: Start request repeated too quickly.
Apr 07 07:27:36 li1703-32 systemd[1]: caddy.service: Failed with result 'start-limit-hit'.
Apr 07 07:27:36 li1703-32 systemd[1]: Failed to start Caddy HTTP/2 web server.

user@xxx:/var/log/caddy$ systemctl restart caddy.service 
Job for caddy.service failed.
See "systemctl status caddy.service" and "journalctl -xe" for details.
# 之后再怎么重启caddy 都失败

# 只有重启才能解决
reboot # 滑稽
kill -TERM 1 # 未尝试
systemctl daemon-reexec # 成功

参考

Systemd 入门教程:命令篇

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html