安装了一个 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
。