Chandler 启动脚本 /bin/bash vs /bin/sh

Chandler 启动脚本 /bin/bash vs /bin/sh

安装了一个 Chandler,并且已经正常运行了几个月,但是最近当我连接服务器时,我发现它没有运行。

通过 SSH 连接,确认它没有运行,因此我通过 chandler 启动脚本()手动重新启动,/etc/init.d/chandler该脚本通过各种重启等完美运行了数月,但我收到以下错误:

/chandler/bin/osafsrvctl: 24: Syntax error: "(" unexpected

现在,如果我直接/chandler/bin/osafsrvctl以 root 身份运行以下命令/chandler/bin/osafsrvctl start,它将启动并且不会出现错误。

在网上搜索后,我相信这是因为 Chandler 需要 /bin/bash 才能正常启动,因为启动脚本是 Bash。很好。检查文件/chandler/bin/osafsrvctl,它确实在使用/bin/bash。将 init.d 启动脚本更改为也使用 /bin/bash 没有任何作用,出现相同的错误。以下是/etc/init.d/chandler生成错误的脚本:

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          chandler
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop chandler server
### END INIT INFO
#
# chandler              This init.d script is used to start chandler.
#                       It basically just calls osafsrvctl.

# set environment variables
. /etc/default/chandler

# set local variables
RETVAL=$?
CHANDLER_HOME="/chandler"

# check input
case "$1" in
    start)
        if [ -f $CHANDLER_HOME/bin/osafsrvctl ];
            then
                /bin/su chandler $CHANDLER_HOME/bin/osafsrvctl start
        fi
        ;;
    stop)
        if [ -f $CHANDLER_HOME/bin/osafsrvctl ];
            then
                /bin/su chandler $CHANDLER_HOME/bin/osafsrvctl stop
        fi
        ;;
    *)
        echo "Usage: /etc/init.d/osafsrvctl {start|stop}"
        exit 1
        ;;
esac

exit $RETVAL

请记住,上述操作一直运行良好,直到某个时候出现故障——不知道发生了什么变化以及为什么会这样。

有任何想法吗?

答案1

如果此脚本使用 运行/bin/bash,请检查符号链接/bin/sh是否指向/bin/bash而不是另一个 shell(/bin/dash例如)。我在将 bash 脚本从旧的 Debian 系统转移到较新的系统时遇到了类似的问题。

尝试通过 更改第一行#!/bin/bash -e

相关内容