通过 update-rc.d 设置的脚本在启动时未被调用

通过 update-rc.d 设置的脚本在启动时未被调用

启动时应调用脚本。我按照互联网上的说明操作,但启动时并未调用该脚本。

脚本/etc/init.d/my_script只是用来touch创建文件来查看它是否有效:

#!/bin/bash
set -x

touch /home/db/called > /home/db/rc.log 2>&1

case "$1" in
  start)
    touch /home/db/started > /home/db/rc.log 2>&1
    ;;
  stop)
    touch /home/db/stopped > /home/db/rc.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

互联网说我只需运行sudo update-rc.d my_script defaults即可注册。

通过运行时,service my_script start它工作正常。文件按预期创建。但重启后没有文件出现。所以我假设脚本根本没有被调用,日志文件rc.log也没有出现。当查看rc*.d文件夹(通过find /etc/rc* -name "*my_script*")时,似乎也没有指向脚本的链接。

也许还有其他一些有用的信息:

  • Ubuntu 18.04 服务器
  • 中的脚本文件/etc/init.d与其中的每个文件一样归 root 所有

谢谢你的帮助!

答案1

我自己解决了。由于某种原因,sudo update-rc.d my_script defaults没有在/etc/rc*.d文件夹中创建符号链接(没有给出错误)。解决方案是自己添加依赖项标头,然后运行defaults,这毫无意义,因为该defaults选项正是不必这样做。来自man update-rc.d

更新 rc.d foobar 默认值

等效依赖头将对 $remote_fs 和 $syslog 具有启动和停止依赖性,并在运行级别 2-5 中启动并在运行级别 0、1 和 6 中停止。

编辑的bash脚本:

#!/bin/bash

### BEGIN INIT INFO
# Required-Start:    $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

set -x

touch /home/db/es_called > /home/db/rc.log 2>&1

case "$1" in
  start)
    touch /home/db/es_started > /home/db/rc.log 2>&1
    ;;
  stop)
    touch /home/db/es_stopped > /home/db/rc.log 2>&1
    #killall -u db > /home/db/rc.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

有关依赖标头的更多信息:https://wiki.debian.org/LSBInitScripts

相关内容