这可能有一个简单的解释,但我当然想不起来。
我已经安装了corosync(通过yum),它是默认的init脚本。 在这个特殊的CentOS安装中有些奇怪,因为我经常需要手动链接/etc/rc.d/init.d/到/etc/init.d。
问题是通过它的符号链接运行失败,但它通过/etc/rc.d/init.d运行良好
更奇怪的是,如果使用完整path运行,并且仅在实际运行在/etc/rc.d/init.d目录下,则运行失败。
例:
[~]# /etc/rc.d/init.d/corosync start Starting Corosync Cluster Engine (corosync): [FAILED] [~]# service corosync status corosync is stopped [~]# cd /etc/rc.d/init.d/ [init.d]# /etc/rc.d/init.d/corosync start Starting Corosync Cluster Engine (corosync): [FAILED] [init.d]# corosync start [init.d]# service corosync status corosync (pid 1985) is running...
任何解释?
编辑:
不知道我改变了什么,但现在从/rc.d/init.d开始工作,但是没有启动service corosync。
[root@server2 mirror]# /etc/rc.d/init.d/corosync start Starting Corosync Cluster Engine (corosync): [ OK ] [root@server2 mirror]# /etc/init.d/corosync start Starting Corosync Cluster Engine (corosync): [FAILED] [root@server2 mirror]# service corosync start Starting Corosync Cluster Engine (corosync): [FAILED]
编辑2:
做了一个从/etc/rc.d/init.d到/etc/init.d的符号链接,现在通过service corosync start运行,但是在启动时不会启动,argh。
编辑3:
除了启动之外,它正在处理每个命令。
我已经将运行级别更改为99,但仍然失败,并且已经将脚本内的path更改为绝对path:/ usr / sbin / corosync
我也做了环境variables的差异:
在服务corosync开始:
_=/bin/env LANG=en_US.UTF-8 PATH=/sbin:/usr/sbin:/bin:/usr/bin PWD=/ SHLVL=1 TERM=xterm
开机时:
_=/bin/env LANG=en_US.UTF-8 PATH=/sbin:/usr/sbin:/bin:/usr/bin PWD=/ SHLVL=2 TERM=linux CONSOLETYPE=vt LANGSH_SOURCED=1 previous=N PREVLEVEL=N runlevel=3 RUNLEVEL=3 UPSTART_EVENTS=runlevel UPSTART_INSTANCE= UPSTART_JOB=rc
启动日志:
Starting Corosync Cluster Engine (corosync): [FAILED]
所以现在脚本在系统已经启动的时候工作,但是不能在启动的时候启动。
有可能是第三版的corosync脚本? /etc/rc2.d/中的版本是链接到/etc/init.d/中的版本还是不同?
顺便说一句,我们已经得到这个甚至没有考虑你的集群设置。 如果这是集群的一部分,则其他节点的日志文件中可能会有线索。
尝试使用-xdebugginginit脚本
# bash -x /etc/rc.d/init.d/corosync start
也尝试使用service start|stop|status corosync 。
如果corosync start在任何目录下工作,但是/etc/rc.d/init.d/corosync start失败,那么可能你正在运行两个不同的脚本。 运行: which corosync
如果没有,请在corosync脚本中查找应该是绝对path的相对path。
所以现在的问题是,/ /etc/init.d/corosync start与bash -x一起使用,但不是没有,而不是在启动。 是对的吗?
bash /etc/init.d/corosync start是否bash /etc/init.d/corosync start (没有-x工作)?
可能在你的configuration文件中设置了一个环境variables,当系统在启动过程中运行脚本时,环境variables就不存在了。 将像env |sort > /tmp/env.$$这样的行env |sort > /tmp/env.$$到/etc/init.d/corosync ,然后对结果文件进行diff 。
另外一种可能性是对启动过程稍后启动的另一项服务的隐藏依赖。 尝试更改为S99...
我遇到过同样的问题…
检查:
#getenforce
如果它返回“强制”,那么你必须在文件: / etc / selinux / config中禁用SELinux
和动力:
#setenforce 0