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