Thursday, January 30, 2014

Liferay 動的データリストディスプレイポートレットの紹介

こんにちは、かわべです。
以前このブログで「この冬は風邪を引かずに過ごせるかも」というような事を書きましたが、今のところ順調に過ごしています。とはいえ、昨年は3月にインフルエンザになったので、まだまだ油断はしません!あと、日によっては早くも花粉症の症状が出ているような気がして大変恐ろしいです。早めに対策して心穏やかに過ごしたいところです。

さて、今日もLiferayのポートレットから1つ紹介したいと思います。今回取り上げるのは、「動的データリスト(Dynamic Data List)ディスプレイポートレット」です。

動的データリストディスプレイポートレットについて

動的データリストとは、Liferayポータル上に設置し、権限を与えられたユーザがリアルタイムにレコードを追加・編集・削除することができるリストです。コーディングやHTMLの知識がなくても、GUIで自由に項目を定義したリストを作成できます。作成したリストは、今回紹介する動的データリストディスプレイポートレットを利用し、好きな位置に配置することができます。

この記事では例として、とある開発チームのサイトページにレビュー指摘用の動的データリストを作成してみます。設計書などのドキュメントレビューを実施した際、参加メンバが自由に指摘事項をレコードとして追加し、対応が完了したら更新できるリストにしてみたいと思います。先に載せてしまいますが、完成イメージはこちらです。


この動的データリストを作成するため、以下の手順で進めていきます。
  1. データ定義の作成
  2. 動的データリストの作成
  3. 動的データリストの表示
  4. 動的データリストへのレコード追加
当記事ではLiferay6.2 CE GA1を使用し、特に記述がない場合は管理者として作業しています。EE版でも同様に動作するはずですし、6.1系でも基本は同様です。

1.データ定義の作成

最初に必要となるのは、どのような項目を持つ動的データリストを作成するかに基づき、データ定義を作成することです。データ定義は動的データリストの雛形のようなものです。
動的データリスト管理画面には、上部ドックバーの「サイト管理→システム管理→コンテンツ→動的データリスト」から移動できます。そこで「データ定義の管理」をクリックし、データ定義の管理画面を表示させます。


Liferayをインストールした際のデフォルトサイトにはサンプルとして利用できるデータ定義が存在するのですが、新規作成したサイトにはデータ定義がありません。「追加」からデータ定義を新規作成していきます。


※ちなみに、デフォルトサイトでは以下のようなデータ定義が利用可能となっていますので、中を覗くと参考になると思います。


データ定義では必要な項目をドラッグして追加し、設定を変更して作成していきます。項目は名称とアイコンを見ればどのような属性かわかると思います。まず項目だけを準備した図が以下です。


右側に追加した項目をクリックすると設定のタブへと切り替わります。ラベルの名称などに加え、こんな設定も可能です。
  • 規定値 ー 表示させるデフォルトの値
  • チップ ー 入力時にヒントとしてポップアップさせる文言
  • インデックス可能 ー 検索対象としてインデックスする
  • 繰り返し可能 ー レコード追加時に複数追加可能となる
今回はレビュー指摘に使用するリストなので、指摘者、対応内容、優先度、対応予定日などを設定できるようなデータ定義としました。


「レビュー指摘」という名称で保存して、データ定義は完了です。

2.動的データリストの作成

では、作成したデータ定義を利用し、実際にサイトメンバが利用する動的データリストを作成してみましょう。

引き続き動的データリスト管理画面から作成します。
「追加」をクリックすると、新規リストの追加画面が表示されるので、 データ定義に「レビュー指摘」を選択し、他の項目を下のように埋めていきます。


サイトメンバに各々レコード追加・更新を許可するため、このような権限にしておきます。今回は使用しませんが、レコードの追加にワークフローを関連づけることもできます。

保存をクリックして、「移行計画書レビュー指摘」という動的データリストを作成します。

3.動的データリストの表示

やっと動的データリストディスプレイポートレットの出番です。
まずはリストを表示させるページに「動的データリストディスプレイ」ポートレットを追加します。「+」→「アプリケーション」→「コラボレーション」のカテゴリに存在します。


ポートレット上の「リストの選択」から、いま作成した「移行計画書レビュー指摘」を選択、保存すると、以下の画面になります。


これで動的データリストディスプレイポートレットは準備完了です。設定についての説明は後に回して、まずはレコードを追加し、リストが更新されることを確かめてみましょう。

4.動的データリストへのレコード追加

まずは管理者のままレコードを追加してみます。
「レビュー指摘の追加」をクリックすると、新規レコード登録フォームへと遷移します。何の設定もしていないので、データ定義どおりに項目が表示されます。


必要な情報を入力して保存すると、リストにレコードが1件追加されました。

 
表示方法に関しても、今は設定をしていないので、定義した項目がすべて表示されます。

今度は、ただのサイトメンバであるUser1としてログインし、指摘に対応したという形式でこのレコードを更新してみます。


このように対応内容を更新できました(内容については完全なフィクションとしてお届けしています)。また、左上にレコード追加ボタンが表示されていることから、User1もレコード追加が可能であることがわかりますね。

というわけで、これで「メンバが各自でレコードを追加し、随時更新できるリスト」が作成できました!
動的データリストは1つのデータ定義から複数作成できるので、今後もレビューをする度に同じ項目を持つ指摘リストが作成できます。

動的データリストディスプレイポートレットの設定

先ほどは設定を何も変えずに使用しましたが、動的データリストディスプレイポートレットで可能な設定を見てみましょう。なお、デフォルトの日本語訳では伝わりにくいところがあるので、一部表示をアメリカ英語にした画面で説明します。(※日本語も含む各言語の翻訳はプロパティファイルで上書き可能です)

設定画面(ポートレット右上の「オプション」→「設定」)から、テンプレートの設定を行うことができます。

テンプレートの設定

"Display Template"ではポートレットでのリスト表示テンプレート、"Form Template"ではレコード追加時のフォームテンプレートを設定できます。
前述したように、デフォルトではいずれの場合もデータ定義のすべての項目がそのまま表示されます。表示させたくない項目がある場合や、ラベルを変更したい場合などにテンプレートを設定することができます。
この2つのテンプレートはデータ定義に紐付けて作成・管理します。テンプレートを作成できる権限がある場合、ポートレット下部に"Add Form Template""Add Display Template"が表示されるので、そこからテンプレートの作成ができます。


Display TemplateはFreeMarkerまたはVelocityを使用して表示画面を作成します。6.2から補完機能のある高機能エディタになりました。


とはいえ、Display Templateを使用して意図通りの画面を作成するにはコーディング知識が必要となってきます。

Form Templateはデータ定義と似たGUIで操作します。セパレータの追加、項目削除などが可能です。


その他の設定項目

Editableは編集可能とするかどうか選択します。チェックを外すと、編集権限を持つユーザでもリストは閲覧のみ可能となります。

Spreadsheet Viewをチェックすると、スプレッドシート形式でリストを表示します。スプレッドシート形式では、特定の列の項目をキーとした並び替えができます。


この状態でも権限があればレコードの追加や編集は可能ですが、追加後にうまく保存されない場合や表示が崩れる場合があるようなので、Spreadsheet Viewを使用する場合にはEditableのチェックを外しておいた方がいいかと思います。

CSVデータのエクスポート

ポートレットからではなく管理画面からの操作ですが、集計したデータをCSV形式でエクスポートする事ができます。「システム管理→サイト管理→コンテンツ→動的データリスト」へ移動し、エクスポートしたい動的データリストの「操作→エクスポート」を実行すると、CSV形式のデータをダウンロードすることができます。(※出力形式としてXMLを選択することもできますが、どうもうまく行かないようです…)


まとめ

動的データリストは、レコード追加、更新、参照などの権限と、表示テンプレートを適切に設定することで、幅広い利用方法が考えられます。たとえばイベントやセミナーへの参加者管理や、共有タスクリストなどに使えるでしょう。
まずはぜひデフォルトサイトに存在するデータ定義を利用して、お手元の環境で試してみてください。

Wednesday, January 22, 2014

LiferayでWebDAVを使おう!

こんにちは。2日連続で自転車トラブルのおおたにです。昨日はタイヤチューブが破裂し、本日はスタンドの金属が破断しました。2日連続で自転車屋に修理を依頼したのでさすがの店員さんもびっくりしていました(自分はそれ以上にスタンドが破断したこと自体に驚いていますが…)。

さて、今回はLiferayにWebDAVアクセスしてみようということで、その利用方法やありがちな失敗/TIPSなどを紹介させていただきます。


WebDAVとは?LiferayのWebDAVアクセス機能とは?


WebDAVとは、ファイル管理のためにHTTPを拡張した仕様のことです。HTTPを利用してWebサービス上のファイルを管理することができます。LiferayもこのWebDAVのインターフェースを実装しており、Liferayの「ドキュメントとメディア(Documents and Media) 」ポートレットが管理するファイルにアクセスすることができます。

WebDAVインターフェースを利用するメリットは、よりシンプルなクライアントを利用してLiferayにアクセスできるという点にあります。例えば、Windowsクライアントを利用しているユーザであれば、ネットワークドライブにマップすることで、Windowsのエクスプローラから通常のファイルと同様にLiferayが管理するファイルを操作することができます。ファイルの読み書きだけを行うライトユーザはエクスプローラを利用し、その他のLiferayに関わる作業を行うヘビーユーザはブラウザを利用する、などの使い分けが考えられます。


LiferayにWebDAVアクセスしてみよう



では、早速LiferayにWebDAVアクセスしてみましょう。以下では、WindowsクライアントでLiferayのWebDAVインターフェースをネットワークドライブに割り当てる方法を説明します。

1. LiferayのDocuments and Mediaポートレットで、WebDAVアクセスのURLを確認する。Documents and Mediaポートレットのフォルダやファイルのコンテキストメニューにある「デスクトップからのアクセス」をクリックし、表示されたURLをコピーします。ルートフォルダにアクセスしたい場合は、ルート直下のフォルダのURLから、そのフォルダ名のパスを消したURLを用います(例えばhttp://localhost:8080/api/secure/webdav/guest/document_library など)



2. Windowsエクスプローラで「ネットワークドライブの割り当て」をクリックします。


3. ドライブを適宜選択し、フォルダーに1.でコピーしたURLを貼り付けます。「別の資格情報を使用して接続する」にチェックを入れて「完了」をクリックし、認証ダイアログにLiferayのログイン情報を入力します(以下の例ではローカルPCにLiferayをインストールしてるのでlocalhost:8080になってます)。


4. 以下のように割り当てが正常終了し、Liferay上のファイルがエクスプローラに表示されればOKです。



うまくWebDAVアクセスできない場合


いくつかの原因が考えられます。以下に、ありがちな原因をLiferayの内外に問わずいくつか挙げてみました。

Windows XP, Windows Vista等でうまくWebDAVアクセスできない


Windows7以降にアップグレードしてください、では元も子もないですが…。Windows XP, Windows Vista, Windows Server 2003ではKB907306のパッチをあてることでWebDAVアクセスできるようになる可能性があります。

非SSL環境下のLiferayにWindowsからWebDAVアクセスできない


デフォルト設定のWindowsではHTTPでWebDAVアクセスできません。なので、サーバ側をSSL化するか、Windowsクライアントのレジストリを変更する必要があります。レジストリの変更手順は以下のとおりです。

1. スタートメニューの「コマンド名を指定して実行」から「regedit」を実行する。
2.  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WebClient\Parametersを開く。
3. BasicAuthLevelを2に変更する(デフォルトは1)。

各種ブラウザやネットワークドライブなど、全てのWebDAVクライアントからアクセスできない(バージョン6.2より古いLiferayを利用している場合)


LiferayのバグLPS-39324に起因している可能性があります。Liferay 6.2以降にアップグレードするか、JAVAの起動オプションで指定するパラメータを変更する必要があります。

JAVAの起動オプション(Tomcatバンドル版だと<TOMCAT_DIR>/bin/setenv.shもしくはsetenv.batのJAVA_OPTS)で-Duser.timezoneがGMT以外に指定されている場合はGMTに変更してLiferayを再起動します。


まとめ


今回は主にWindowsクライアントを使っての説明になりましたが、もちろんMac OS XのFinderやLinuxでも同様の使い方ができます。WebDAV機能はLiferayインストール直後から有効になっていますので、是非試してみてください。

Thursday, January 16, 2014

Alfresco Workdesk サンプルアプリケーションのインストール

こんにちは。てらしたです。

今日は初めて保育参観というものに参加してきました。写真とかビデオを撮っていいものとは知らずカメラを持っていかなかったんですが、父親と母親、母親とおばあちゃんみたいなかんじで2人体制で来て、片方が子どもの相手をし(保護者参加型だったので)、手が空いている方が撮影するというフォーメーションを組んでいる親御さん達がいて、そういうやり方があるのかと勉強になりました。次回に活かしたいと思います。それはともかく保育参観自体は保育園での様子や子どもの個性の違いが見れて楽しかったです。仕事の都合がつけばなるべく参加していきたいですね。

さて、ここから本題ですが今回はWorkdeskシリーズ第3弾です。「Workdeskを触ってみよう」の回ではAlfresco社が用意したリポジトリに接続してWorkdeskを体験してみましたが、今回は手元のAlfrescoにWorkdeskに同梱されているサンプルアプリケーション(Human Resource Application)をインストールしてみます。以下の手順では環境はCentOSを想定していますが、ファイルをコピーしたりLinux用に用意されたスクリプトを実行したりしているだけなのでWindowsの方にも参考になると思います(もちろんWindows用のスクリプトもあります)。

まず準備としてこのあたりを参考にAlfrescoをインストールしておいてください。Community Edition(以下、CE)でもEnterprise Edition(以下、EE)のTrial版でもどちらでも結構です。

WorkdeskについてはCEでもEEでも今回の手順はほとんど変わらないのですが、次回ご紹介する内容がEEにしかない機能なのでEEのTrial版を使用してもらった方がよいと思います。もちろん、CEとEE両方の環境を作ってもらっても全く問題ありませんし、両者を比較してみるのもよいかもしれません。以下の手順ではEEのTrial版を使います。

Workdeskのzipをダウンロードしたら、適当な場所に展開しておきます。次にAlfresco用のものとは別にTomcatをインストールし(Alfresco用のTomcatインスタンスとポートが競合しないようにserver.xmlを編集しておいてください)、webapps以下に展開したWorkdeskのzipの中の「bin/workdesk」をコピーします。
$ cp -a bin/workdesk <tomcat_dir>/webapps/
次にAlfresco社が用意したTrial用のリポジトリではなく、この後インストールするサンプルアプリケーションを使うようにWorkdeskの設定を変更します。Workdeskのweb.xmlを編集し、「opencmis_trial」を使用するように設定されているパラメータを以下のように「opencmis_hr」を使用するように変更します。
$ vi <tomcat_dir>/webapps/workdesk/WEB-INF/web.xml
<!-- Configuration OpenCMIS: Apache Chemistry OpenCMIS (opencmis.OwCMISNetwork) implementation
    + Sample Application - Human Resources Application -->
<param-value>deploy#WEB-INF/conf/opencmis_hr</param-value>

<!-- Configuration OpenCMIS: Alfresco Workdesk Trial -->
<!-- <param-value>deploy#WEB-INF/conf/opencmis_trial</param-value> -->
次に、「opencmis_hr」の設定を変更します。owbootstrap.xmlを編集し、Authentication modeを「NONE」から「ALFRESCO」に、DataSourceをMySQLに設定します(他のDBを使う場合はその設定を有効化してください)。
$ vi <tomcat_dir>/webapps/workdesk/WEB-INF/conf/opencmis_hr/owbootstrap.xml
<!-- <Authentication mode="NONE”/> -->

<!-- ALFRESCO -->
<Authentication mode="ALFRESCO">
    <BaseURL>http://localhost:8080/alfresco</BaseURL>
</Authentication>
<!-- DefaultDataSource>
    <JNDIName>java:/HSQLDB</JNDIName>
</DefaultDataSource -->

<!-- DefaultDataSource>
    <JNDIName>java:/OracleDS</JNDIName>
</DefaultDataSource -->

<!-- DefaultDataSource>
    <JNDIName>java:/MSSQLDS</JNDIName>
</DefaultDataSource -->

<!-- DefaultDataSource>
    <JNDIName>java:/DB2DS</JNDIName>
</DefaultDataSource -->            

<DefaultDataSource>
    <JNDIName>java:/MySQLDS</JNDIName>
</DefaultDataSource>

<!-- DefaultDataSource>
    <JNDIName>java:/PostgreSQLDS</JNDIName>
</DefaultDataSource> -->
次にWorkdeskが使用するDBとテーブルを作成します。ここではMySQL用のスクリプトを使用していますが、他のDBを使っている場合はそのDB用のスクリプトを使ってください。
$ mysql -u root -p < db/scripts/create_mysql_databases/Create_MySQL_Database.sql
$ mysql -u root -p < db/scripts/OwMySQL_CreateAttributeBagTable.sql
$ mysql -u root -p < db/scripts/OwMySQL_CreateDBHistoryManagerTable.sql
$ mysql -u root -p < db/scripts/OwMySQL_CreateDBRoleManagerTable.sql
ここで、HistoryManagerTableとRoleManagerTableはEEにしかない機能で使用するものであるため、CEにはこれらのテーブルを作成するスクリプトは含まれていません。

次にWorkdeskが今作成したDBに接続するための設定を行います。展開したWorkdeskのの「db/tomcat/META-INF/context.xml」をTomcatにコピーし、編集します。
$ cp db/tomcat/META-INF/context.xml <tomcat_home>/webapps/workdesk/META-INF/
$ vi <tomcat_dir>/webapps/workdesk/META-INF/context.xml
使用するDBの部分のコメントアウトを外して有効化し、ユーザ名、パスワード、ホスト名、DB名を補完します。
<Resource name="java:/MySQLDS"
    auth="Container"
    type="javax.sql.DataSource"
    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
    username=“owdemo"
    password=“owdemo"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/owd?autoReconnect=true"
    maxWait="1000"
    removeAbandoned="true"
    maxActive="30"
    maxIdle="10"
    removeAbandonedTimeout="60"
    logAbandoned="true"
    validationQuery="select 1"/>
最後に、サンプルアプリケーションをインストールするスクリプトを実行します。まず展開したWorkdeskの「bin/Sample Application/Human Resources Application」ディレクトリ以下を「/opt/workdesk/sample_application」にコピーします(コピー先はどこでもよいですが、パスにスペースや日本語を含まないように気を付けてください)。
$ cp -a bin/Sample\ Application/Human\ Resources\ Application/* /opt/workdesk/sample_application/
次に、シェルスクリプトの引数の数が10個以上ある関係でCentOSではうまくいかないのでスクリプトを以下のように書き換えます。
$ vi /opt/workdesk/sample_application/bin/oa.sh
#!/bin/sh

OA_JAR=$(dirname $0)/oa.jar

# 変更前
# echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
# 変更後
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}

# 変更前
# java -jar $OA_JAR  $1 $2 $3  $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17
# 変更後
java -jar $OA_JAR  $1 $2 $3  $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} ${16} ${17}
スクリプトを書き換えたら以下のように引数を与えて実行します。
$ /opt/workdesk/sample_application/install-workdesk-hr.sh -ap <Alfrescoのインストールディレクトリ> -u <Alfrescoの管理者ユーザのID> -p <Alfrescoの管理者ユーザのパスワード>
【例】
$ /opt/workdesk/sample_application/install-workdesk-hr.sh -ap /opt/alfresco -u admin -p admin
インストールに成功したらWorkdeskを起動します。Alfrescoはサンプルアプリケーションをインストールする過程で起動しているはずですが、もし起動していないようであれば起動しておいてください。
$ <tomcat_dir>/bin/startup.sh
正常に起動したらブラウザから以下のURLにアクセスしてみます(手元の環境ではTomcatのポートをAlfrescoと競合しないよう8180に変えてあります)。

http://localhost:8180/workdesk

ログイン画面が表示されたらAlfrescoの管理者ユーザのユーザ名とパスワードでログインします。以下のように人事関連のドキュメントを検索する検索テンプレートがいくつか表示されていればサンプルアプリケーションのインストールは成功です。


試しに「関係書類の検索」を選んで何も入力せずに「検索」ボタンを押してみましょう。先ほどのインストール時に手元のAlfrescoに投入された人事関連の文書がヒットすると思います。


検索結果から適当な社員を選んでアイコンをクリックすると、その社員に関連する書類を閲覧することができます。


以上でサンプルアプリケーションのインストールは終了ですが、ついでに1つWorkdeskの機能をご紹介したいと思います。このフォルダをAlfresco Shareから見ると、上のように「雇用条件」や「報酬」のようにフォルダは切られておらず、すべてのファイルが1階層で入っていることがわかります。


このように、参照しているリポジトリの物理的なフォルダ階層に依らず、Workdeskでは仮想的なフォルダ階層を定義してコンテンツを表示することができます。このような仮想的なフォルダの作り方についても今度ご紹介できればと思います。

Wednesday, January 8, 2014

CentOS6.4でcatalina.outのlogrotateに失敗した話(と育休取ってますよという話)

こんにちは。昨年末に第二子が産まれててんやわんやの大谷です。

3年前にも同じ状況になっていたはずですが(第一子のときです)、諸々を完全に忘れていてミルクの作り方からオムツのかえ方、沐浴の仕方など、ほぼ0から覚えなおす日々を送っております。
が、幸いなことに弊社は父親でも(本人さえ望めば)育休を取得できるため、1月から2-3か月ほど育休を取得させてもらっています。育児休業と言っても全休ではないので、ある程度在宅orオフィスで仕事をして、残りは嫁と共に子供の面倒を見るという形になります。まあチームメンバーにはそれなりに迷惑を掛けることになるのですが、そこはごめんなさいということで…。
というわけで、本年も引き続きどうぞよろしくお願いいたします。

さて、2014年最初のエントリですが、CentOS6.4でTomcatのcatalina.outをログローテーションしようとしてうまくいかなかった話をしようと思います。結論から言うと、anacronのcron.dailyで動いているlogrotateの動作をSELinuxが邪魔していたというとても基本的かつ残念なお話しになっています…。年初から冴えない!


catalina.outのログローテーション設定


TomcatのJavaプロセスの標準出力、標準エラー出力をcatalina.outにリダイレクトしており(cataliha.shに記述されているとおりです)、このログをlogrotateを使ってローテーションさせます。

以下、具体的なログローテーションの設定方法です。

1. logrotate用設定ファイルの作成

はい、シンプルです。日次でローテーションして60日分ログを保管します。catalina.outはjavaプロセスがずっと掴んでいるため、copytruncateオプションを使っています。

 # vi /etc/logrotate.d/tomcat
# logrotate file for Tomcat
/opt/liferay/tomcat/logs/catalina.out {
  missingok
  copytruncate
  daily
  dateext
  rotate 60
}

2. 設定ファイルの権限変更

権限を0644にしときます。

 # chmod 0644 /etc/logrotate.d/tomcat


設定は以上です。続いて動作確認をしてみましょう。


logrotateの動作確認


動作確認には以下のように3つのレベルがあります。早速1つずつチェックしていきましょう。

1. logrotateの設定テスト


 # logrotate -d /etc/logrotate.d/tomcat

このコマンドでlogrotateの実行をテストすることができます。テストなので実際に処理は行われません。出力結果に"log needs rotating"とあれば正しく設定されています。

2. logrotate単体での動作確認


 # logrotate -f /etc/logrotate.d/tomcat

このコマンドで特定のログについてlogrotateを強制実行することができます。catalina.out-yyyymmdd というファイルにcatalina.outの内容がコピーされ、catalina.outが0バイトになっていればローテーション成功です。
過去の日付の名前のファイル(もちろんtouch -dでタイムスタンプも古くしておく)を予め用意しておけば、ログ削除のテストもできます。

ちなみに、立て続けにlogrotate -fを実行しても、2回目以降はローテーション処理が行われません。理由は以下の2つです。
  • 前回ローテーションした日付が記録されている
    •  /var/lib/logrotate.status に"/opt/liferay/tomcat/logs/catalina.out yyyy-mm-dd" のように記録されているので、再度実行する場合は編集して古い日付にしておきましょう
  • ローテーション先のファイル名が既に存在している
    • catalina.out-yyyymmddのような同名ファイルがあると処理をスキップするので、再度実行する場合はリネームしておきましょう

3. cron.dailyを通じた動作確認


 # anacron -f

CentOS6.4の標準インストールでは、logrotateは日次のcron.dailyの1処理として実行され、cron.dailyの実行はanacronによってコントロールされています。そこで、このコマンドでcron.daily実行の強制スケジューリングを行います。 
/var/log/cron に"Will run job `cron.daily' in xx min."と出力されるので、いつcron.dailyが実行されるかチェックしておきましょう。もちろん前述のlogrotate.status編集&ログリネームはやっておいてください。

その時間あたりに /var/log/cron をtailしていればlogrotateが実行されたことが分かるので、完了したらcatalina.outを確認してみましょう。先ほどと同様、ファイル catalina.out-yyyymmdd が生成されていればOKです。


実際に運用してみると…


さて、全ての動作確認をクリアしたので実際に運用してみよう。というわけで次の日にlogsフォルダを見てみると…はい、ありませんでした。ローテーションしたはずの catalina.out-yyyymmdd が無い!anacron -fのテストも通ったのに、何故か無い…

というわけで色々調べていったら確かにありましたよ原因。原因は、一番最初に話した通り、SELinuxでした。/var/lib/audit/audit.logを見ると、以下のようなログが出てました。

type=AVC msg=audit(1387149242.691:29032): avc:  denied  { write } for  pid=3826 comm="logrotate" name="catalina.out" dev=dm-0 ino=87986 scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file

はい。見事にlogrotateのcatalina.outへの書き込みが拒否されてます。こんなところに影響あるのかSELinux!

というわけで、SELinuxを無効化します。反映させるにはサーバ再起動が必要です(一時的に無効にするにはsetenforce 0でもOK)。

 # vi /etc/sysconfig/selinux
SELINUX=disabled

これで一晩待てば、無事ローテーションしてるはず、というわけで、手元の環境では無事ローテーションが確認できました。


まとめ!


問答無用でSELinuxはOFF!とは言いませんが、必要に応じてONにしましょうというあまりにも基本的なまとめになってしまいましたが、同じ問題で悩んでいる人の参考になれば幸いです(いるのか!)。