systemctl命令
-
格式:
systemctl <COMMAND> <name.service>
.service
可以省略不写,系统会自动补全
-
配置文件
- 每一个Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit
- 配置文件主要放在
/usr/lib/systemd/system
目录,也可能在/etc/systemd/system
目录
系统管理
# 检查系统上是否安装了systemd
systemd --version
# 重启系统
systemctl reboot
# 显示主机信息
hostnamectl
#显示主机时区
timedatectl
管理服务
-
systemctl
命令在enable
、disable
和mask
子命令中增加了--now
选项,可以实现激活的同时启动服务,取消激活的同时停止服务 -
启动
systemctl start name.service
-
停止
systemctl stop name.service
-
重启
systemctl restart name.service
-
状态
systemctl status name.service
-
重新加载配置文件
- 这里的配置文件指的是
/usr/lib/systemd/system
目录中的文件- 不是程序本身的配置文件
systemctl reload name.service
- 这里的配置文件指的是
-
设定某服务开机自启
- 相当于在
/etc/systemd/system
目录添加一个符号链接,指向/usr/lib/systemd/system
里面的name.service
文件- 开机时,
Systemd
只执行/etc/systemd/system
目录里面的配置文件
- 开机时,
- 设置开机启动以后,软件并不会立即启动
systemctl enable name.service
- 相当于在
-
取消开机自启
systemctl disable name.service
-
禁用服务
- 防止服务被其他服务间接启动,也无法通过 start 或 restart 命令来启动服务
systemctl mask name.service
-
启用服务
- 仅针对于已禁用的服务
systemctl unmask name.service
-
杀死服务及其子进程
systemctl kill name.service
-
列出服务所有依赖
systemctl list-dependencies name.service
服务查看
#查看服务激活与否
systemctl is-active name.service
#查看服务的开机自启状态
systemctl is-enabled name.service
#查看系统所有运行的服务项
systemctl list-units --type=service
journalctl命令
- systemd日志的配置文件是
/etc/systemd/journald.conf
# 需要root权限
# 查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
# 查看系统本次启动的日志
journalctl -b
# 显示尾部的最新n行日志;默认为10
journalctl -n 20
# 滚动显示
journalctl -f
# 查看指定服务(unit)的日志
journalctl -u <service name>
# 根据pid查看服务日志
journalctl -b _PID=xxx
# 查看指定时间的日志
journalctl --since="2012-10-30 18:17:16"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"
守护进程概念
- 守护进程就是Daemon程序,是一种在系统后台执行的程序,它独立于控制终端并且执行一些周期任务或触发事件
- 通常被命名为"d"字母结尾,如httpd、syslogd、systemd和dockerd等
- 通过&符号,可以把命令放到后台执行,但它与守护进程是不同的
- 守护进程与终端无关,是被init进程收养的孤儿进程;而后台进程的父进程是终端,仍然可以在终端打印
- 守护进程在关闭终端时依然坚挺;而后台进程会随用户退出而停止,除非加上nohup
- 守护进程改变了会话、进程组、工作目录和文件描述符,后台进程直接继承父进程(shell)的
service与systenctl
- service命令实质是去执行
/etc/init.d/
目录下的脚本 - systemctl命令兼容了service
- 命令替换
- 启动:
service name start
==>systemctl start name.service
- 停止:service name stop ==>
systemctl stop name.service
- 重启:service name restart ==>
systemctl restart name.service
- 状态:service name status ==>
systemctl status name.service
- 启动:
syslog与systemd-journal
syslog
是一个协议,它定义了消息的格式- 真正运行在系统里的是
syslogd
,一个守护程序 - 它监听socket
/dev/log
并来自这个 socket 的信息写入日志文件 - 如
/var/log/messages
或/var/log/syslog
- 真正运行在系统里的是
- systemd-journald 是 syslog 的补充
- systemd 的日志保存在
/run/log/journal
中,系统重启就会清除 - 通过新建
/var/log/journal
目录,日志会自动记录到这个目录中,并永久存
- systemd 的日志保存在
systemd架构图
参考
-
- 下半部分介绍了启动错误排查过程