如何在 Systemd 下配置并运行关机前的脚本?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 如何在 Systemd 下配置并运行关机前的脚本?

Systemd 是一种用于管理 Linux 系统的初始化和服务管理工具。它提供了强大的功能,允许用户在关机或重启系统之前运行自定义脚本。这对于执行清理任务、保存数据或执行其他系统管理操作非常有用。本文将详细介绍如何在 Systemd 下配置并运行关机前的脚本。

了解 Systemd 关机过程

在开始配置之前,我们需要了解 Systemd 的关机过程。当您选择关机或重启系统时,Systemd 会发送一个关机信号给所有运行中的服务,并逐个关闭它们。然后,它将运行关机目标的相关任务,以便在系统关闭之前执行所需的操作。这些任务可以是预定义的或用户定义的脚本。

创建脚本文件

首先,我们需要创建一个脚本文件,其中包含在关机前要执行的操作。可以使用任何喜欢的文本编辑器创建一个新文件,并将其保存为 .service 文件扩展名。

示例脚本文件 pre-shutdown-script.service

[Unit]
Description=Pre-Shutdown Script

[Service]
Type=oneshot
ExecStart=/path/to/your/script.sh

[Install]
WantedBy=multi-user.target

在上面的示例中,ExecStart 行指定要运行的脚本的路径。请将 /path/to/your/script.sh 替换为您实际的脚本路径。

将脚本文件复制到 Systemd 目录

将脚本文件复制到 Systemd 的服务目录中,使 Systemd 可以找到它。服务目录通常位于 /etc/systemd/system//usr/lib/systemd/system/ 下。

使用以下命令将脚本文件复制到 /etc/systemd/system/ 目录:

sudo cp pre-shutdown-script.service /etc/systemd/system/

刷新 Systemd 配置

复制脚本文件后,需要刷新 Systemd 配置以使其生效。运行以下命令刷新 Systemd 配置:

sudo systemctl daemon-reload

配置关机前运行的脚本

要配置 Systemd 在关机前运行脚本,需要创建一个关联关系。运行以下命令创建关联关系:

sudo systemctl enable pre-shutdown-script.service

这将创建一个符号链接,将脚本文件与关机目标关联起来,以便在关机时执行脚本。

测试脚本配置

现在,您可以测试脚本配置是否正常工作。运行以下命令来模拟关机并查看脚本是否被执行:

sudo systemctl start pre-shutdown-script.service
sudo systemctl stop

如果脚本成功执行,您将看到相关的输出或操作效果。

## 查看脚本执行日志

为了方便调试和查看脚本执行的日志,您可以配置 Systemd 记录关机前脚本的输出。您可以使用 StandardOutputStandardError 选项来指定日志文件的位置。

修改脚本文件 pre-shutdown-script.service

[Unit]
Description=Pre-Shutdown Script

[Service]
Type=oneshot
ExecStart=/path/to/your/script.sh
StandardOutput=file:/path/to/logfile.log
StandardError=file:/path/to/errorlog.log

[Install]
WantedBy=multi-user.target

/path/to/logfile.log 替换为您希望保存标准输出的日志文件路径,将 /path/to/errorlog.log 替换为您希望保存错误输出的日志文件路径。

保存文件后,使用以下命令刷新 Systemd 配置:

sudo systemctl daemon-reload

然后重新启动脚本服务:

sudo systemctl start pre-shutdown-script.service

您可以查看指定的日志文件以检查脚本的输出和错误信息。

自定义脚本执行顺序

如果您希望脚本在关机过程的特定阶段运行,您可以修改脚本的 WantedBy 部分。Systemd 使用不同的关机目标来表示关机过程的不同阶段,例如 halt.targetreboot.targetpoweroff.target

要更改脚本的关联关系,将 WantedBy 部分的值更改为所需的关机目标。

示例:

[Install]
WantedBy=poweroff.target

在上面的示例中,脚本将与 poweroff.target 关联,这意味着它将在系统关机时运行。

删除脚本配置

如果您不再需要在 Systemd 下运行关机前的脚本,可以按照以下步骤进行删除。

  1. 停止脚本服务:
sudo systemctl stop pre-shutdown-script.service
  1. 禁用脚本服务:
sudo systemctl disable pre-shutdown-script.service
  1. 删除脚本文件:
sudo rm /etc/systemd/system/pre-shutdown-script.service
  1. 刷新 Systemd 配置:
sudo systemctl daemon-reload

总结

在 Systemd 下运行关机前的脚本可以让您在系统关机或重启之前执行自定义操作。通过创建脚本文件、配置关联关系和刷新 Systemd 配置,您可以轻松地实现此功能。记得测试和调试脚本配置,并查看日志以获取有关脚本执行的详细信息。使用这些步骤和技巧,您将能够更好地管理和控制系统关机过程中的操作和任务。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
安全 大数据 API
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
592 0
|
Linux
Linux基础命令---mput上传ftp文件
mput 使用lftp登录ftp服务器之后,可以使用put指令将文件上传到服务器。mput指令可以使用通配符,而put指令则不可以。 1、语法 mput [-c] [-d] [-a] [-E] [-O base] files 2、选项列表 -d 穿件与文件...
4540 0
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
118139 0
|
JavaScript 前端开发 Python
成功解决:Can‘t find Python executable “python“, you can set the PYTHON env variable.
这篇文章分享了作者在运行前端Vue项目时遇到的关于Python执行环境的问题和解决方法。问题是由于找不到Python可执行文件导致的编译错误,解决方法包括安装编译环境、卸载并重新安装出现问题的`node-sass`包,并重新执行`npm install`和`npm run dev`。
成功解决:Can‘t find Python executable “python“, you can set the PYTHON env variable.
|
缓存 NoSQL 数据库
【高并发】秒杀系统设计思路
【高并发】秒杀系统设计思路
319 0
|
存储 KVM 文件存储
【KVM虚拟化】· 存储池、存储卷
【KVM虚拟化】· 存储池、存储卷
986 0
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
816 0
 ECharts 雷达图案例001-自定义节点动画
|
数据采集 传感器 存储
光学雨量计雨量传感器的工作原理与实时数据采集
光学雨量计雨量传感器的工作原理与实时数据采集
光学雨量计雨量传感器的工作原理与实时数据采集
|
前端开发 JavaScript 数据处理
.单页面应用和多页面应用区别及优缺点
.单页面应用和多页面应用区别及优缺点
400 4