2017-02-01

tobijibu

Redmineを再起動するスクリプトを作成する

RedmineはRailsアプリなので、Apache上に普通にインストールするとPassengerを使うことになります。

Passengerを使って動いているRailsアプリは、ソース編集をして、変更を反映させるにはアプリの再起動が必要です。Redmineも例外ではなく、プラグインを入れたり、ソースを編集した後には、再起動しなければ反映されません。

Redmineを含むRailsアプリの再起動は以下の3つの方法があります。私はRedmineの再起動が必要な時には、2つ目の方法を使っていました。

  • passenger-config restart-appコマンドを使う
  • restart.txtを作成する
  • Apacheを再起動する

頻度が高いわけではないのですが、プラグインのアップデートをした後は、毎度restart.txtを生成して、ブラウザでアクセスして確認ということをしていました。 少し面倒だったので、restart.txtを生成してアクセスするコマンドを作ってみました。

処理内容はrestart.txtを生成した後に、curlを使ってRedmineにアクセスするだけです。tailでは、ログを見ています。再起動するとそのログがerror_logに吐かれるので、再起動直後のログを出力するようにしてあります。

このスクリプトではrestart.txtを削除しません。再起動の判定はrestart.txt生成時間のタイムスタンプを見ているとのことなので、削除不要と考えています。

#!/bin/sh
touch /var/lib/redmine/tmp/restart.txt
curl -s 'http://localhost/redmine/' >/dev/null
tail /var/log/httpd/error_log | grep redmine | tail -n1

また、この記事を書くにあたって、PassengerのRailsアプリの再起動について調べていたところ、restart.txtを使わない方法があることがわかりました。それが先ほどの3種類のうち、1つめにあたる再起動方法です。

公式ではこの方法が良いと記載されています。

The preferred method for restarting an application, is through the passenger-config restart-app tool. This tool can run interactively or non-interactively.
引用 - https://www.phusionpassenger.com/

コマンドを打つだけなのでわざわざスクリプト化する必要も無いと思いますが、せっかくなのでこっちのパターンでも作成してみました。

このパターンではRedmineにアクセスする必要はなく、コマンド実行直後にRedmineが再起動されます。

#!/bin/sh
passenger-config restart-app /var/lib/redmine
tail /var/log/httpd/error_log | grep redmine | tail -n1

参考サイト

Passengerアプリの再起動について
https://www.phusionpassenger.com/library/admin/apache/restart_app.html

再起動時に出力されるログについて確認しました
http://qiita.com/kinushu/items/12e240f6e0379d993008