Возможно, этому есть простое объяснение, но я определенно не могу об этом думать.
У меня установлен 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, но не при запуске службы 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 .. и теперь она работает при запуске через службу corosync start .. но не запускается при загрузке, argh.
Изменить 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]
Итак, теперь сценарий работает, когда система уже запущена, но не во время загрузки.
Может быть, есть третья версия скрипта corosync? Связана ли версия в /etc/rc2.d/ с версией в /etc/init.d/ или она другая?
Кстати, мы дошли до этого, даже не учитывая настройку вашего кластера. Если это часть кластера, в файлах журналов других узлов могут быть подсказки.
Итак, проблема в том, что /etc/init.d/corosync start
работает с bash -x, но не без него и не при загрузке. Это правильно?
Делает bash /etc/init.d/corosync start
(без -x
работай)?
Вероятно, в вашем профиле задана переменная среды, которой нет, когда система запускает сценарий во время процесса загрузки. Добавьте строку вроде env |sort > /tmp/env.$$
к /etc/init.d/corosync
а потом diff
полученные файлы.
Еще одна возможность - это скрытая зависимость от другой службы, которая запускается позже в процессе загрузки. Попробуйте перейти на S99...
Если corosync start
работает в любом каталоге, но /etc/rc.d/init.d/corosync start
не работает, значит, вы, вероятно, используете два разных скрипта. Бегать: which corosync
Если нет, проверьте внутри скрипта corosync относительные пути, которые должны быть абсолютными.
Попробуйте отладить сценарий инициализации с помощью -x
# bash -x /etc/rc.d/init.d/corosync start
Также попробуйте использовать service start|stop|status corosync
.
У меня была такая же проблема...
чек:
# getenforce
если он возвращает "Enforcing", вам необходимо отключить SELinux в файле: / и т.д. / selinux / config
и динамично:
# setenforce 0