linux系统服务systemd探讨

简介: linux系统服务systemd探讨

前言

el7之前CentOS采用init进程来启动服务

init管理服务启动一般会使用以下命令

/etc/init.d/nginx start 
service nginx start

但是init有一些缺点

  • init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
  • init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

为了解决这些问题诞生了systemd。

根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。 实际上Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面 使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。

[root@el7 ~]# ps aux |head -10|sort -k 2 -n 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  43724  3984 ?        Ss    2022   0:47 /usr/lib/systemd/systemd --system --deserialize 21

systemd相关的一些命令

设置系统启动级别

Linux下一共有七个启动级别(0-6)

0 - halt (Do NOT set initdefault to this) # 系统停机模式,系统默认运行级别不能设置为0,不然的话是没办法正常启动的,这个启动级别下,机器就是关机的状态
1 - Single user mode  # 单用户模式,有root权限,用于系统的维护,禁止远程登录,没有网络功能,就像windows的安全模式
2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 多用户模式,没有NFS和网络的支持
3 - Full multiuser mode # 完整的多用户文本模式,有NFS和网络,登录后进入控制台的命令行模式
4 - unused  # 系统保留
5 - X11   # 图形化模式,登陆后进入图形GUI模式
6 - reboot (Do NOT set initdefault to this) # 重启模式

需要切换这些级别的话也很简单

init 0   #关机
init 3   #文本模式
init 5   #图形化界面模式
init 6   #重启

用systemd获取默认启动级别

[root@el7 ~]# systemctl get-default 
multi-user.target # 完整多用户模式

systemd设置和切换模式

systemctl set-default multi-user.target # 设置为完整多用户模式
systemctl set-default graphical.target  # 设置为图形化
systemctl isolate multi-user.target   # 将当前模式切换为多用户
systemctl isolate graphical.target    # 将当前模式切换为图形化

管理服务启停

Linux下有很多进程是在后台一直跑的,也就是我们说的守护进程或者daemon进程

用systemctl 配合以下命令即可进行管理

restart:重启服务,可启动服务
reload:服务重新加载配置文件
status:查看服务状态
start:启动服务
stop:停止服务
enable:开启自启
disable:关闭自启

其他用法

systemctl命令专门用来管理服务(守护进程)

systemctl [list-units] #列出所有服务的运行状态
systemctl list-unit-files #列出所有服务的开机自启状态
systemctl daemon-reload #重新加载systemd服务
systemctl list-dependencies #查看服务的依赖关系
systemctl --failed #查看启动失败的服务
systemctl --type=service #查看常用服务的运行状态(不包含系统服务)
systemctl list-dependencies multi-user.target #查看指定target包含的所有服务(unit)
服务状态说明(systemctl status):
loaded #服务初始化完成,已正常加载配置文件
not-found #服务配置文件没有找到
falied #服务启动失败,配置文件错误
actvie(running) #服务正在运行一个或多个进程
actvie(exited) #仅执行一次就正常结束的服务,目前并没有任何进程在系统中执行
active(waitting) #正在执行当中,不过还需要等待其他的事件才能继续处理
inactive #服务关闭
enabled #服务启用自启
disabled #服务禁用自启
static #服务开机启动项不可被管理
masked #服务禁止建立启动链接
注:static指服务对应的service文件中没有定义[Install]区域,因此无法配置为开机启动服务,只能作为其他配置文件的依赖。
常用参数(参数后面接上服务名,服务名的.service后缀可省略):
mask:冻结(禁用)服务启动脚本
unmask:启用服务启动脚本
  • 启动脚本解释
开机自启就是在/etc/systemd/system/multi-user.target.wants/目录里建立对应服务的启动脚本的软链接。
自启就是删除/etc/systemd/system/multi-user.target.wants/目录中对应服务的软链接。
启动脚本保存在/usr/lib/systemd/system/目录下
启动脚本保存在/etc/systemd/system/目录下

配置systemd管理其他服务

很多情况下我们会进行编译安装,编译完成之后我们如果用systemd来管理的话需要写一个service文件

vim /etc/systemd/system/服务名.service
[Unit]
Description=服务描述
Documentation=文档地址
Wants=其他服务#network.target
After=其他服务#syslog.target network.target
[Service]
Type=simple #服务类型
User=用户名 #服务执行的用户,默认为root,其他用户管理systemd需经过root同意
Environment=环境变量 #定义环境变量
ExecStartPre=启动服务之前执行的命令
ExecStopPost=停止服务之后执行的命令
ExecStart=启动服务执行的命令
ExecReload=重启服务执行的命令
ExecStop=停止服务执行的命令
#执行的命令必须是绝对路径(脚本或进程),不能执行shell的内部命令
[Install]
WantedBy=multi-user.target #定义为开机启动项
最后还需要用户手动让systemd进程重新读取service启动脚本:
systemctl daemon-reload
服务类型说明(Type):
simple:默认值,执行ExecStart指定的命令,启动主进程
forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
dbus:当前服务通过D-Bus启动
notify:当前服务启动完毕,会通知Systemd进程,然后再继续往下执行
idle:若有其他任务执行完毕,当前服务才会运行
systemd-analyze命令用于查看服务启动过程和耗时:
systemd-analyze #查看系统开机时间
systemd-analyze blame #查看每个服务的启动耗时
systemd-analyze critical-chain #显示瀑布状的启动过程流,逆序
systemd-cgls #以树形结构列出正在运行的进程
服务的启动日志默认保存在/var/log/message文件

之后就可以正常使用systemctl命令了

目录
相关文章
|
10天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
129 78
|
13天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
52 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
9天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
62 13
|
10天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
28 0
|
21天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
7月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
2179 0
|
7月前
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
254 0
|
2月前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统
|
5月前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
3月前
|
Ubuntu Linux 网络安全
从头安装Arch Linux系统
本文记录了作者安装Arch Linux系统的过程,包括安装成果展示和遇到的疑难点及其解决方法,如硬盘不足、下载失败、设置时区、安装微码和配置无密码登录等。
从头安装Arch Linux系统