这可能有一个简单的解释,但我肯定想不出来。
我已经安装了 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