如何在 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 配置,您可以轻松地实现此功能。记得测试和调试脚本配置,并查看日志以获取有关脚本执行的详细信息。使用这些步骤和技巧,您将能够更好地管理和控制系统关机过程中的操作和任务。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
Windows
电脑win系统开机自动运行批处理、脚本等的方法/开机自动执行bat脚本
电脑win系统开机自动运行批处理、脚本等的方法/开机自动执行bat脚本
1039 0
|
3月前
|
Ubuntu Linux 应用服务中间件
在Linux中,如何启动、停止或重启服务?
在Linux中,如何启动、停止或重启服务?
|
3月前
|
Linux
在Linux中,哪些命令可以管理系统服务,如启动、停止、重启一个服务?
在Linux中,哪些命令可以管理系统服务,如启动、停止、重启一个服务?
|
3月前
|
关系型数据库 MySQL Linux
在Linux中,如何启动、停止、重启一个系统服务?
在Linux中,如何启动、停止、重启一个系统服务?
|
6月前
|
Shell Linux
shell自动关机/重启计划
shell自动关机/重启计划
174 1
|
12月前
|
Linux
linux设置开机服务自动启动/关闭自动启动命令 chkconfig
linux设置开机服务自动启动/关闭自动启动命令 chkconfig
336 0
|
Linux 网络安全
linux后台启动服务命令自己停止 nohup和&
简单的说,在启动命令最后加&,是后台启动,但是你的ssh连接工具断了 这个服务就停止了
|
Shell
shell脚本控制程序启动停止重启
shell脚本控制程序启动停止重启
308 0
|
Shell Linux Perl
Centos7下定时重启gunicorn进程的shell脚本
Centos7下定时重启gunicorn进程的shell脚本
1233 0