如何调试未运行的 init.d 脚本

PIC*_*ain 8 debian init.d

我正在尝试god在 Debian 启动期间启动。我在/etc/init.d/目录中添加了一个脚本,看起来像这样。

#!/usr/bin/sh
### BEGIN INIT INFO
# Provides:          god
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog 
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: start god process monitoring
# Description:       Start god process monitoring
### END INIT INFO

god_conf="absolute/path/to/god.conf"
god_pid_file="/var/run/god/god.pid" ; mkdir -p `dirname $god_pid_file`
god_log_file="/var/log/god/god.log" ; mkdir -p `dirname $god_log_file`
case "$1" in
  start)
    god -c "$god_conf" -P "$god_pid_file" -l "$god_log_file"
    RETVAL=$?
    echo "God started"
    ;;
...
Run Code Online (Sandbox Code Playgroud)

我运行以下命令来创建必要的符号链接 sudo update-rc.d god defaults

但是,当我重新启动机器时,上帝似乎没有启动。我的问题是,我该如何调试这个问题?

我已经看过了dmesg,但没有看到任何与god. 我也看了看,syslog没有看到那里有任何东西。另外,god.log文件是空的,没有god.pid文件。

我不知道问题是否是我的 init 脚本甚至没有被调用,或者它在尝试启动 God 时是否失败。我曾尝试通过运行手动启动上帝sudo /etc/init.d/god start,这似乎工作正常。有任何想法吗?

Gil*_*il' 4

#!/usr/bin/sh
Run Code Online (Sandbox Code Playgroud)

sh在几乎所有 UNIX 中,其正常位置是/bin/sh。一些unix变体已经合并了/bin/usr/bin,所以/usr/bin/sh也可以工作,但是可移植的方式是/bin/sh,所以这就是你应该在shebangs中使用的方式。对您来说最重要的是,在 Debian 上,除非您不遗余力,否则不会有/usr/bin/sh.