启动时应调用脚本。我按照互联网上的说明操作,但启动时并未调用该脚本。
脚本/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