corosync 的奇怪初始化脚本问题

corosync 的奇怪初始化脚本问题

这可能有一个简单的解释,但我肯定想不出来。

我已经安装了 corosync(通过 yum),并安装了它的默认初始化脚本。这个特定的 CentOS 安装有些奇怪,因为我经常需要手动将 /etc/rc.d/init.d/ 链接到 /etc/init.d。

问题是,当通过符号链接运行时它会失败,但通过 /etc/rc.d/init.d 可以正常运行

更奇怪的是,如果使用完整路径运行它就会运行失败,只有实际在 /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 start 启动时则不行。

[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 运行时它可以工作.. 但不会在启动时启动,啊。

编辑3:

除启动时外,它可以与所有命令一起使用。

我已将运行级别更改为 99,但仍然失败,并且我已将脚本内的路径更改为绝对路径:/usr/sbin/corosync

我还对环境变量进行了差异分析:

在服务 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]

答案1

因此,现在脚本在系统已启动时可以工作,但在启动期间不能工作。

是否有第三个版本的 corosync 脚本?/etc/rc2.d/ 中的版本与 /etc/init.d/ 中的版本有关联吗?还是有所不同?

顺便说一句,我们甚至还没有考虑您的集群设置就走到了这一步。如果这是集群的一部分,那么其他节点的日志文件中可能会有线索。

答案2

尝试使用以下命令调试初始化脚本-x

# bash -x /etc/rc.d/init.d/corosync start

也尝试使用service start|stop|status corosync

答案3

如果corosync start在任何目录中都有效但/etc/rc.d/init.d/corosync start失败了,那么您可能正在运行两个不同的脚本。运行:which corosync

如果不是,请检查 corosync 脚本内部是否存在应为绝对路径的相对路径。

答案4

我遇到过同样的问题...

查看:

# 获取强制

如果它返回“Enforcing”,那么您必须在文件中禁用 SELinux:在/etc/selinux/配置

并且动态地:

# 设置强制 0

相关内容