linux的systemd与init的区别
程序员文章站
2022-07-14 13:34:50
...
介绍
init
以前的Linux启动都是用init进程。启动服务:
$ sudo /etc/init.d/apache2 start
# 或者
$ service apache2 start
缺点:
- 启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
- 启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
systemd
在较新的linux系统上,都使用systemd 取代了init,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。systemd为系统启动和管理提供了完整的解决方案。它提供了一组命令。字母d是守护进程(daemon)的缩写。查看systemd 的版本:
$ systemctl --version
systemd作用
systemd提供一组命令,这些涉及到linux系统的各方各面
管理系统systemctl
systemctl是 systemd 的主命令,用于管理系统。
# 重启系统
$ sudo systemctl reboot
# 关闭系统,切断电源
$ sudo systemctl poweroff
# CPU停止工作
$ sudo systemctl halt
# 暂停系统
$ sudo systemctl suspend
# 让系统进入冬眠状态
$ sudo systemctl hibernate
# 让系统进入交互式休眠状态
$ sudo systemctl hybrid-sleep
# 启动进入救援状态(单用户状态)
$ sudo systemctl rescue
查看启动耗时systemd-analyze
# 查看启动耗时
$ systemd-analyze
Startup finished in 1.152s (kernel) + 3.196s (initrd) + 23.328s (userspace) = 27.677s
# 查看每个服务的启动耗时
$ systemd-analyze blame
# 显示瀑布状的启动过程流
$ systemd-analyze critical-chain
# 显示指定服务的启动流
$ systemd-analyze critical-chain atd.service
hostnamectl
查看当前主机信息
# 显示当前主机的信息
$ hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 32a04e6f345141f896683347d2142b27
Boot ID: 4ec0198818fb45cb89597c2fa1609792
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1062.9.1.el7.x86_64
Architecture: x86-64
# 设置主机名。
$ sudo hostnamectl set-hostname rhel7
localectl
查看本地化设置
# 查看本地化设置
$ localectl
System Locale: LANG=zh_CN.UTF-8
VC Keymap: cn
X11 Layout: cn
# 设置本地化参数。
$ sudo localectl set-locale LANG=en_GB.utf8
$ sudo localectl set-keymap en_GB
timedatectl查看当前时区设置
# 查看当前时区设置
$ timedatectl
Local time: 四 2020-12-24 20:22:07 CST
Universal time: 四 2020-12-24 12:22:07 UTC
RTC time: 四 2020-12-24 12:22:07
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
# 显示所有可用的时区
$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
# 设置当前时区
$ sudo timedatectl set-timezone America/New_York
$ sudo timedatectl set-time YYYY-MM-DD
$ sudo timedatectl set-time HH:MM:SS
loginctl查看当前登录的用户
# 列出当前session
$ loginctl list-sessions
SESSION UID USER SEAT
c1 42 gdm seat0
1 1000 oceanstar seat0
2 sessions listed.
# 列出当前登录用户
$ loginctl list-users
UID USER
42 gdm
1000 oceanstar
# 列出显示指定用户的信息
$ loginctl show-user oceanstar
UID=1000
GID=1000
Name=oceanstar
Timestamp=四 2020-12-24 20:18:20 CST
TimestampMonotonic=217149844
RuntimePath=/run/user/1000
Slice=user-1000.slice
Display=1
State=active
Sessions=1
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
Linger=no
系统资源
systemd可以管理所有系统资源(不同资源统称为Unit),分为12类:
- Service unit:系统服务
- Target unit:多个 Unit 构成的一个组
- Device Unit:硬件设备
- Mount Unit:文件系统的挂载点
- Automount Unit:自动挂载点
- Path Unit:文件或路径
- Scope Unit:不是由 systemd 启动的外部进程
- Slice Unit:进程组
- Snapshot Unit:Systemd 快照,可以切回某个快照
- Socket Unit:进程间通信的 socket
- Swap Unit:swap 文件
- Timer Unit:定时器
systemctl list-units
查看当前系统的所有 Unit
# 列出正在运行的 Unit
$ systemctl list-units
# 列出所有Unit,包括没有找到配置文件的或者启动失败的
$ systemctl list-units --all
# 列出所有没有运行的 Unit
$ systemctl list-units --all --state=inactive
# 列出所有加载失败的 Unit
$ systemctl list-units --failed
# 列出所有正在运行的、类型为 service 的 Unit
$ systemctl list-units --type=service
systemctl status查看系统状态和单个 Unit 的状态
# 显示系统状态
$ systemctl status
# 显示单个 Unit 的状态
$ sysystemctl status bluetooth.service
# 显示远程主机的某个 Unit 的状态
$ systemctl -H [email protected].example.com status httpd.service
systemctl提供的三个查询状态方法
# 显示某个 Unit 是否正在运行
$ systemctl is-active application.service
# 显示某个 Unit 是否处于启动失败状态
$ systemctl is-failed application.service
# 显示某个 Unit 服务是否建立了启动链接
$ systemctl is-enabled application.service
Unit 管理
常用的启动和停止 Unit(主要是 service)命令
# 立即启动一个服务
$ sudo systemctl start apache.service
# 立即停止一个服务
$ sudo systemctl stop apache.service
# 重启一个服务
$ sudo systemctl restart apache.service
# 杀死一个服务的所有子进程
$ sudo systemctl kill apache.service
# 重新加载一个服务的配置文件
$ sudo systemctl reload apache.service
# 重载所有修改过的配置文件
$ sudo systemctl daemon-reload
# 显示某个 Unit 的所有底层参数
$ systemctl show httpd.service
# 显示某个 Unit 的指定属性的值
$ systemctl show -p CPUShares httpd.service
# 设置某个 Unit 的指定属性
$ sudo systemctl set-property httpd.service CPUShares=500
systemctl list-dependencies列出Unit的所有依赖关系
Unit 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。
systemctl list-dependencies
命令列出一个 Unit 的所有依赖。
$ systemctl list-dependencies nginx.service
上面命令的输出结果之中,有些依赖是 Target 类型,默认不会展开显示。如果要展开 Target,就需要使用–all参数。
$ systemctl list-dependencies --all nginx.service
Unit 的配置文件
推荐阅读
-
Android中gravity与layout_gravity的使用区别分析
-
Python跳出循环语句continue与break的区别
-
深入理解jQuery中live与bind方法的区别
-
jQuery中delegate与on的用法与区别示例介绍
-
深入浅析python 协程与go协程的区别
-
jquery prop的使用介绍及与attr的区别
-
php $_SERVER windows系统与linux系统下的区别说明
-
Cwrsync如何使用可以实现Linux与windows下的文件同步详解
-
linux shell中的比较符号与特殊符号介绍
-
VS2012使用初体验 VS2012与VS2010的区别说明