奇怪的初始化脚本与corosync问题

这可能有一个简单的解释,但我当然想不起来。

我已经安装了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