本教程解释了如何在 Debian 11 和基于 Linux 发行版中启动或引导时运行脚本或服务。
如何在Debian 11中启动时运行脚本?要在 Debian 11 启动时正确添加服务和脚本,你需要创建 Systemd 单元。本教程侧重于 Systemd 单元,如果你正在寻找在启动时运行脚本的快速说明,请直接跳到创建 Systemd 单元以在启动时运行脚本部分,本文还包括Debian 11启动时运行脚本实现步骤。
什么是 Systemd 单元?Debian 11如何启动时运行脚本?
Systemd 单元是包含正确管理或执行某些系统文件的信息的配置文件。Systemd 单元可用于管理服务、套接字、设备、挂载点、自动挂载点、交换文件或分区、启动目标、监视的文件系统路径、由 systemd 控制和监督的计时器、资源管理切片或组外部创建的进程。
Systemd 单元位于目录/etc/systemd/system 下。你想在启动时使用 Systemd 单元运行的任何脚本都必须在此目录下的文件(单元)中指定。
使用 ls 命令的快速视图将向我们显示系统中现有的 systemd 单元。
ls /etc/systemd/system
上面屏幕截图中未包含的文件之一是tomcat.service,其内容类似于下图。
如何在Debian 11中启动时运行脚本?注意:以下信息供你熟悉单元配置文件。别担心,你为运行脚本而创建的单元会更简单。
其中 [Unit] 指令:
Description : 这个指令允许你为一个单元添加一个描述,在这里你可以设置要识别的单元名称。
Wants:在这里,你可以指定单元依赖项。请注意,针对此类似目的有不同的指令。例如,指令Requires用于指定严格的依赖关系,没有它单元就不能工作。与 Requires 相反, Wants 用于指定依赖项,没有这些依赖项,单元可以继续工作。
After:当前单元将在此指令中指定的单元之后开始。
[服务] 部分指令:
类型:在前面的示例中,forking 表示应终止服务,同时保留必须分配 PID 的子进程。
Environment:在这里,你可以指定单元环境变量。
ExecStart:此指令允许你指定要执行的路径和命令。
ExecStop:你可以指定用于停止单元的命令。
SuccessExitStatus:此指令允许你指定退出状态和信号。
用户:你可以指定单位的用户所有者。
组:你可以指定单元的组所有者。
UMask:你可以指定用户掩码。
RestartSec : 如果设备自动重启,你可以在此处指定等待重试重启服务的时间。
重新启动:你可以为 Systemd 定义何时应该重新启动设备。可用选项始终为失败时、中止时、成功时、看门狗时和异常时。
上例中的 [Install] 指令是 WantedBy。
WantedBy:该指令允许你将单元定义为依赖项;它类似于Wants指令,但指定当前单元是否被另一个单元视为依赖项。
[Unit] 部分中未包含在上一个屏幕截图中的其他常见指令:
要求:在此指令中,你可以指定依赖项以防止启动失败。与Wants指令相反,如果不满足使用 Requires 指令指定的依赖项,则该单元将无法工作。
在 [服务] 部分:
PIDFile:forking 指令需要 PIDFile 指令,其中包含子进程的文件 pid 的路径,以便 Systemd 识别它。
StartLimitInterval:表示该单元有 60 秒的时间尝试在失败后重新启动 10 次。
StartLimitBurst:此指令指示尝试限制,在前面的示例中,60 秒内尝试 10 次。
有关 Systemd 单元的更多信息,你可以阅读:
https : //manpages.debian.org/jessie/systemd/systemd.unit.5.en.html。
在 Debian 11 上创建一个 Systemd 单元以在启动时运行脚本
Debian 11如何启动时运行脚本?在启动时运行脚本可能比以前用于显示单元公共内容的tomcat.service文件更简单,包含的配置更少。
如前所述,包含有关启动时运行的脚本信息的文件(单元)位于目录/etc/systemd/system 中。要定义在启动时运行的脚本,你需要为此脚本创建一个新单元。要在/etc/systemd/system下创建一个单元,你可以使用 nano ,如下例所示,其中我创建了一个名为script.service的单元,你可以将其命名为你认为方便识别脚本的名称。
sudo nano /etc/systemd/system/script.service
Debian 11启动时运行脚本实现步骤:脚本单元的内容将比之前用作示例的tomcat.service更简单。
将以下代码复制并粘贴到你在/etc/systemd/system下创建的文件中。
注意:将<Your Script Name here>替换为你的脚本名称,将</PATH/TO/Script.sh>替换为你的脚本路径。
[Unit]
Description=Your Script Name here
After=default.target
[Service]
ExecStart=/PATH/TO/Script.sh
[Install]
WantedBy=default.target
Debian 11如何启动时运行脚本?将内容复制到/etc/systemd/system/下的文件中后,你需要使用 systemctl 命令启用它,如下所示。将<script.service>替换为你分配给该单元的正确名称。
现在你的脚本已准备好在 Debian 11 中启动时运行。
结论
如何在Debian 11中启动时运行脚本?如你所见,在 Debian 11 中使用 Systemd 在启动时运行脚本非常简单。任何 Linux 用户级别都可以通过在单位目录中创建一个简单的文件来完成此任务。当然,Linux 提供了在引导时运行脚本的其他方法,本教程中没有介绍这些方法,例如 Cron。任何 Linux 用户都应该知道如何在启动时定位 Systemd 单元以运行服务或所需的脚本。Systemd 单元和 cron 都是可接受的方法,而 rc.local 或 init.d 脚本已过时。
感谢你阅读本教程,该教程解释了如何在 Debian 11 中使用 Systemd 在启动时运行脚本。请继续关注我们以获取其他 Linux 提示和教程。