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命令了

目录
相关文章
|
7天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
30 3
|
7天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
25 2
|
7天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
26 3
|
10天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
29 6
|
10天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
36 6
|
11天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
42 5
|
11天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
Linux
Linux 命令详解(七)Systemd 入门教程:命令篇
Systemd 入门教程:命令篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
1026 0
|
Linux
Linux 命令详解(八)Systemd 入门教程:实战篇
Systemd 入门教程:实战篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
1064 0
|
15天前
|
缓存 监控 Linux