OTRS + Centos 6.5

При установке системы OTRS на Centos 6.5 Final обнаружилось что автостарт OTRS Scheduler не работает.

Первое что выяснилось сервис  otrs  почему-то не прописался в  chkconfig , хотя сам файл скрипта в  /etc/init.d/  положил.

[root@testit ~]# chkconfig | grep otrs
[root@testit ~]#

Что ж, прописываем руками

[root@testit ~]# chkconfig --add otrs
[root@testit ~]# chkconfig otrs on
[root@testit ~]# chkconfig | grep otrs
otrs            0:off   1:off   2:on    3:on    4:on    5:on    6:off

После перезапуска системы видим на консоли или в файле  /var/log/boot.log 

Starting httpd: [ OK ]
Starting crond: [ OK ]
Starting OTRS..
 Checking httpd ...  failed!
  --> Please start the web server first! (service httpd start) <--

Несмотря на то что httpd нормально стартует, otrs вываливается считая, что httpd не запущен.

Можно провести следующий эксперимент. Остановить httpd сервер и затем запустить его и сходу сделать туже самую проверку которая выполняется в скрипте otrs.

# service httpd stop
[root@testit ~]# service httpd start && /sbin/service httpd status | grep 'is running'
[root@testit ~]#

Эксперимент показывает, что на момент проверки сервер httpd ещё не запущен. Как вы сможете увидеть дальше httpd стартовал у меня за время между 2-мя и 3-мя секундами.
Поэтому чтобы на автостарте, когда за httpd запускается и otrs всё отработало правильно нужно что-то изменить.
В каталоге  /etc/sysconfig/  размещается конфигурационный файл  otrs  устанавливающий переменные

[root@testit ~]# cat /etc/sysconfig/otrs | grep 'OTRS_.*_RUNNING'
OTRS_HTTP_RUNNING=1
OTRS_CRON_RUNNING=1
OTRS_SCHEDULER_RUNNING=1

Можно установить опцию в ноль это отключит проверку запущенности httpd

OTRS_HTTP_RUNNING=0

и дальше не читать. Но на мой взгляд это механизм кривой и мы сделаем немного иначе.
Мы пропатчим секцию секцию проверки httpd в файле  /etc/init.d/otrs  Пропатченный скрипт будет ждать 10 сек и если httpd сервер за это время не появится скрипт будет вываливаться с кодом возрата 1.

      # --
      # test if apache is running..
      # --
      if test $OTRS_HTTP_RUNNING -gt 0; then
        SECFORWAIT=10
        echo -n " Checking httpd ..."
        for (( c=1; c<=$SECFORWAIT; c++ )); do
          if $OTRS_USED_WEBSERVER_TEST >/dev/null 2>&1; then
            echo " done."
            break
          elif [[ "$c" -eq "1" ]] ; then
            echo -en "\n  $SECFORWAIT seconds scheduled for waiting for httpd start "
          fi
          if [[ "$c" -ge "$SECFORWAIT" ]]; then
            echo "   failed!"
            echo "   --> Please start the web server first! (service $OTRS_USED_WEBSERVER start) <--"
            exit 1
          fi
          echo -n "."
          sleep 1
        done

      else
          echo " Disabled: httpd check!"
      fi

      # --
      # database connection
      # --
      echo -n " Checking database connection... "

А это результат работы когда httpd не запущен

[root@testit ~]# service otrs start
Starting OTRS..
 Checking httpd ...
  10 seconds scheduled for waiting for httpd start .........   failed!
   --> Please start the web server first! (service httpd start) <--

Теперь когда httpd запущен

[root@testit ~]# service httpd start
Starting httpd:                                            [  OK  ]

[root@testit ~]# service otrs start
Starting OTRS..
 Checking httpd ... done.
 Checking database connection... Trying to connect to database
DSN: DBI:mysql:database=otrs;host=127.0.0.1
DatabaseUser: otrsuser

Connected.
 done.
 Starting OTRS Scheduler Service...  done.
 Enable /opt/otrs/bin/otrs.PostMaster.pl ... done.
 Checking otrs spool dir...  done.
 Creating cronjobs (source /opt/otrs/var/cron/*) ...
 done.

  -->> http://testit.fake/otrs/index.pl <<-- 
Final start of OTRS.. done

А вот как выглядит автостарт

Starting httpd:                                            [  OK  ]
Starting crond:                                            [  OK  ]
Starting OTRS..
 Checking httpd ...
  10 seconds scheduled for waiting for httpd start .. done.
 Checking database connection... Trying to connect to database
DSN: DBI:mysql:database=otrs;host=127.0.0.1
DatabaseUser: otrsuser

Connected.
 done.
 Starting OTRS Scheduler Service... ERROR: OTRS-otrs.Scheduler-91 Perl: 5.10.1 OS: linux Time: Thu Feb 27 17:01:06 2014

 Message: NOTICE: otrs.Scheduler.pl is registered on the DB, but the registry has not been updated in 81 seconds!. The register will be deleted so Scheduler can start again without forcing

 Traceback (1597): 
   Module: main::_AutoStop (unknown version) Line: 592
   Module: /opt/otrs/bin/otrs.Scheduler.pl (unknown version) Line: 239

 done.
 Enable /opt/otrs/bin/otrs.PostMaster.pl ... done.
 Checking otrs spool dir...  done.
 Creating cronjobs (source /opt/otrs/var/cron/*) ...
 done.

  -->> http://testit.fake/otrs/index.pl <<-- 
Final start of OTRS.. done
Starting atd:                                              [  OK  ]

Ошибка, вернее предупреждение связано с предыдущей остановкой. Сравнительно быстро. 81 секунда от ребута до старта сервиса.
Ну и вот и шедулер которого мы ждали.

[root@testit ~]# ps afx | grep otrs | grep -v grep
 1601 ?        S      0:00 /usr/bin/perl /opt/otrs/bin/otrs.Scheduler.pl -a start -s 1

Готово.