是否可以在 Debian 关机/重启时首先执行脚本?

Bra*_*one 5 shutdown debian init.d reboot bash-script

我目前正在尝试注册一个脚本(位于 /etc/init.d 中),使该脚本在关机/重启时作为第一个脚本/程序执行(更改为运行级别 0 或 6)

我曾经update-rc.d stop_servers stop 0 0 6 .为这两个运行级别注册脚本。它在那里正确注册,但名称为K01stop_servers。这使得脚本不会作为第一个被执行。
我基本上需要一切仍在运行。这就是为什么我希望它是第一个。
也就是说,我仍然需要运行我的 apache、mysql 和 (s)ftp 服务器,并且我的 java 仍然功能齐全。

我如何实现这一目标?

脚本如下:

#! /bin/bash

### BEGIN INIT INFO
# Provides:          mc_server_safe_shutdown
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:
# Default-Stop:      0 6
# Description:       Shuts down all Minecraft serves softly
### END INIT INFO

/root/.stop_servers

exit 0
Run Code Online (Sandbox Code Playgroud)

use*_*ser 1

执行您想要执行的操作的正确方法是创建一个列出必要依赖项的自定义初始化脚本。在该脚本中,您可以启动/停止相关服务,具体取决于脚本是使用第一个参数调用start还是stop作为第一个参数调用。

您可以从一个简单的脚本(例如模板)开始/etc/init.d/motd,因为它将包含使其完全正常工作的所有基本部分。在您的情况下,您希望脚本说明

# Required-Stop: $remote_fs $syslog apache2 mysql
Run Code Online (Sandbox Code Playgroud)

因为您需要运行remote_fssyslog 设施(但您不关心提供这些设施的具体服务),特别是在发出停止操作时运行apache2mysql 服务。请注意,Java 本身并不是一种服务,但使用它可能会依赖于服务,包括文件系统。

Should-StopRequired-Stop在 insserv(8) 手册页中描述为:

在这两种情况下,脚本系统应避免停止这两个Stop标记声明的服务,直到包含这些标记的脚本停止为止。

这些名称来自服务初始化脚本的Provides(文字服务名称,$开头无符号)和/etc/insserv.conf(设施名称,$开头符号)。

当您按照所需方式获得脚本后,请使用update-rc.d或直接使用insserv.