Назад | Перейти на главную страницу

Странная проблема сценария инициализации с 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, но не при запуске службы 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