Systemd(RHEL7)でOTRS4を稼動させるためのTIPS

仕事で使った経緯もあり、その後の更新情報を追っているOTRS*1。運用管理などの方面に明るい方はご存知かとは思いますが、ITILに準拠したヘルプデスク運用支援システムです。2014年11月にバージョン4.0系列がリリースされ*2、これまでの3.3系列よりも機能が拡充されているようです。
RHEL7系用にパッケージ提供されるOTRSは、この4.0系列のみとなっています。ただ、ソース*3SRPMはあるので、そちらで旧バージョンを利用することは可能と思われます(が、当方は未確認です。あしからず…)。

ただ、ここに挙げたRHEL7とOTRS4の組み合わせですが、まだまだ本格運用に乗せる人が少ないのか、非常に情報が少ないです。しかも、そのままでは簡単に動作させることすら許してくれません…と言うか、RPMパッケージ内に標準で用意されるinitスクリプトで起動できません(汗)*4
修正すべき箇所も把握していますので、本来なら問題のinitスクリプトを適切な形に直してやれば動くようになるのでしょうが、せっかく最新のRHEL7系列で動かすのであれば、systemdで動く形にしてやりたいと思います*5

このスクリプトでやろうとしていることは、主に以下の4つ。「サービスの起動に必要なの?」というものも含まれてますが…。今までのinitスクリプトが如何に柔軟*6な対応を許していたかがよくわかる格好の事例でしょう。

  • Webサーバの稼動状態確認
  • DBの接続確認
  • 未送信メールの掃出し
  • cronジョブの登録・削除

initスクリプトをsystemdに移行するに当たって重要なのは、起動・終了時にホントに必要な処理の取捨選択だと思います(個人の感想です)。実際のところ、OTRSの起動にホントに必要なのは、「cronジョブの登録・削除」だけです*7。各種サーバは外部に切り離し可能ですから、必要に応じて依存関係を記載することで対応したいと思います。

で、「cronジョブの登録・削除」は、その処理自体が一瞬で終わってしまいます。プロセスの残存もありませんので、一般的なデーモンよろしく"Type=Simple"にしてしまうと、瞬間的に起動して終了してしまう「謎のプロセス」になります。この場合は「起動時の処理は終わったけど、稼働中」を示す"Type=OneShot"とすることで、明示的に停止宣言するまではsystemd内部で「稼働中」として取り扱われます。

で、RHEL7でDBサーバにMariaDB(旧称・MySQL*8 )、WebサーバにApacheを利用する場合、systemdの設定ファイルはこうなります。


[Unit]
Description=OTRS: Open-source Ticket Request System, Copyright (C) 2001-2012 OTRS AG
Documentation=https://otrs.github.io/doc/manual/admin/stable/en/html/
Requires=crond.service httpd.service mariadb.service
After=crond.service httpd.service mariadb.service

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/sysconfig/otrs
ExecStart=/opt/otrs/bin/Cron.sh start otrs
ExecStop=/opt/otrs/bin/Cron.sh stop otrs

[Install]
WantedBy=multi-user.target

このファイル(仮に"otrs.service"とします)を、/usr/lib/systemd/system配下に置いてから、次のコマンドを実行してやることで、めでたく(ここで作成した)OTRSがsystemd向けのサービスとして認識されるようになります。

systemctl daemon-reload

あとは、他のサービスと同様に、起動・停止(start/stop)や自動起動の登録とその解除(enable/disable)などは自由自在(のはず)。

「そもそも、インストールに失敗するんだけど」というあなた、逐一エラーメッセージを見て対応すれば(一応は)解決しますので、がんばってください(えっ?)。

*1:Open source Ticket Request Systemの略

*2:Version 4.0.1が2014/11/25にリリース

*3:といってもtarボールです

*4:記述時点最新リリースの4.0.4現在も改善はしてないです

*5:問題ノ先送リ、ヨクナイ

*6:「身勝手」とも言う

*7:これすらも無効化可能ですが、そうすると実体がなくなります

*8:「旧称」だと、語弊があるかな?