При установке системы 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
Готово.