Systemd守护进程

systemd入门教程

如果你刚接触Ubuntu、CentOS等Linux系统,大概率会遇到“启动服务”“开机自启”这类需求。而systemd,就是Linux系统里负责“统筹管理”这些事的“大管家”。这篇教程不讲复杂原理,只教你搞懂它是什么、怎么用,轻松搞定服务管理和开机自启。

一、先搞懂:systemd到底是啥?

我们先抛弃专业定义,用比喻理解:

把Linux系统想象成一个“大家庭”,家里有各种“打工仔”(进程):有的负责网络连接(sshd服务),有的负责网页服务(nginx),有的负责定时任务(crond)。这些“打工仔”大多在后台默默干活,不露面(也就是“守护进程”)。

而systemd,就是这个家的“大管家”——它的核心工作的是:

  • 开机时,按顺序叫醒需要的“打工仔”(并行启动服务,加快开机速度);
  • 运行中,管理“打工仔”的生死(启动、停止、重启服务);
  • 听话办事,比如你让某个“打工仔”开机就上班(配置开机自启);
  • 记日志,哪个“打工仔”出问题了,它会记下原因(方便排错)。

补充:Ubuntu 16.04、CentOS 7及以上版本,都默认用systemd当“管家”。之前的老系统用的是“老管家”(SysV init,对应/etc/init.d目录),现在基本被淘汰,我们重点学新管家的用法。

二、核心工具:systemctl命令(操控管家的“遥控器”)

systemd是“管家”,但我们不能直接和它对话,得用systemctl这个“遥控器”发指令。所有操作都在终端执行,核心命令就这几个,记熟就能应对80%场景。

基础命令(以“sshd服务”为例,sshd是远程登录服务,很常用)

|功能需求|命令|通俗解释|

|—|—|—|

|启动服务|sudo systemctl start sshd|让“sshd打工仔”开始上班|

|停止服务|sudo systemctl stop sshd|让“sshd打工仔”下班|

|重启服务|sudo systemctl restart sshd|让“sshd打工仔”下班再重新上班(改配置后常用)|

|查看服务状态|systemctl status sshd|看看“sshd打工仔”在不在上班、有没有出问题|

|设置开机自启|sudo systemctl enable sshd|告诉管家,开机时自动叫“sshd打工仔”上班|

|取消开机自启|sudo systemctl disable sshd|告诉管家,开机不用叫“sshd打工仔”(按需关闭)|

小技巧:查看状态时看什么?

执行systemctl status sshd后,重点看两行:

  • 如果显示“active (running)”,说明服务正常运行(打工仔在干活);
  • 如果显示“inactive (dead)”,说明服务没启动(打工仔没上班);
  • 如果显示“failed”,说明服务启动失败(打工仔想上班但出问题了),终端会提示错误原因,跟着改就行。

三、实战:让自己的脚本开机自启(新生最常用需求)

假设你写了一个脚本(比如my_script.sh,功能是开机后自动备份文件),想让它开机就运行。用systemd配置很简单,分5步走,每步都有解释。

前置准备(必做!不然会出错)

  1. 给脚本加“可执行权限”(让系统允许它运行):
    chmod +x /home/你的用户名/my_script.sh注:把路径换成你脚本的实际路径,比如脚本在桌面,路径就是/home/xxx/桌面/my_script.sh
  2. 测试脚本能否正常运行:/home/你的用户名/my_script.sh确保运行时没有报错,再进行下一步(不然开机自启也会失败)。

步骤1:创建“服务配置文件”

systemd管理服务,需要一个“配置文件”(告诉管家这个服务是什么、怎么启动)。这个文件要放在/etc/systemd/system/目录下,后缀为.service

执行命令创建文件(以脚本名my_script为例,配置文件名叫my_script.service):sudo nano /etc/systemd/system/my_script.service

步骤2:写入配置内容(抄模板,改3处就行)

在打开的编辑器里,复制下面的内容,然后修改标注的3处地方,保存退出(nano编辑器按Ctrl+O保存,Enter确认,Ctrl+X退出)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Unit]

Description=My Custom Script  # 1. 自定义服务描述,比如“我的备份脚本”

After=network.target  # 2. 脚本启动时机:网络就绪后再启动(避免依赖问题)

[Service]

Type=simple  # 服务类型,新手默认用simple就行

ExecStart=/home/你的用户名/my_script.sh  # 3. 改成你的脚本绝对路径!

Restart=on-failure  # 脚本运行失败时,自动重启

RestartSec=5  # 重启间隔5秒

[Install]

WantedBy=multi-user.target  # 多用户模式下开机自启(默认选这个)

步骤3:让管家识别新服务

刚创建的配置文件,管家还不知道,需要刷新一下:sudo systemctl daemon-reload

步骤4:启动服务并设置开机自启

依次执行3条命令,完成配置:

  1. 启动服务:sudo systemctl start my_script.service
  2. 设置开机自启:sudo systemctl enable my_script.service
  3. 查看状态(确认成功):systemctl status my_script.service

步骤5:验证效果(可选)

重启系统,看看脚本是不是自动运行了:sudo reboot 重启后执行systemctl status my_script.service,如果显示“active (running)”,说明成功!

四、常见问题排错(新生必看)

1. 服务启动失败,显示“failed”执行sudo journalctl -u my_script.service,查看详细日志,日志里会明确说哪里错了(比如路径写错、脚本权限不够)。

2. 脚本路径没错,但启动失败

大概率是脚本里用了相对路径(比如./file.txt),改成绝对路径(比如/home/xxx/file.txt)就行——开机时脚本的“工作目录”和你手动运行时不一样,相对路径会失效。

3. 想取消这个开机自启服务

执行两条命令:

sudo systemctl disable my_script.service(取消开机自启)

sudo systemctl stop my_script.service(停止当前运行的服务)

五、总结(记牢这3点就行)

  1. systemd是Linux的“服务大管家”,负责管理服务启动、开机自启等;
  2. systemctl命令操控它,核心命令就启动、停止、重启、查看状态、设置自启这几个;
  3. 自定义脚本开机自启,核心是创建.service配置文件,告诉管家“怎么启动脚本”。

不用一开始就吃透所有参数,先会用基础命令和开机自启配置,后续遇到复杂需求再慢慢拓展就行~