質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
logrotate

logrotateはログの世代管理やサイズ制限を行うLinux標準のツールです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

3回答

6327閲覧

ログローテーション時にservice httpd gracefulを成功させたい

H_K

総合スコア14

logrotate

logrotateはログの世代管理やサイズ制限を行うLinux標準のツールです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2016/11/11 02:33

編集2016/11/11 10:44

###前提・実現したいこと
下記の /etc/logrotate.d/httpd において postrotate ~ endscript に記述した
/sbin/service httpd graceful を成功させたいのですが、失敗します。

エラーメッセージを見ると、権限問題の模様です。
logrotateは、root権限で実行されないのでしょうか。

###発生している問題・エラーメッセージ
/tmp/graceful.out

Gracefully restarting httpd: (13)Permission denied: AH00058: Error retrieving pid file /tmp/httpd.pid AH00059: Remove it before continuing if it is corrupted.

###該当のソースコード
/etc/logrotate.d/httpd

/var/log/httpd/access_log /var/log/httpd/error_log { daily missingok rotate 90 delaycompress ifempty sharedscripts postrotate /sbin/service httpd graceful > /tmp/graceful.out 2>&1 endscript }

###試したこと
手動でrootユーザにて service httpd graceful を実行すると、成功します。
(sudo においても、パスワード入力が必要ですが、成功します)

###補足情報(言語/FW/ツール等のバージョンなど)

CentOS release 6.7 (Final)
Server version: Apache/2.4.23 (Unix)

$ pwd /tmp $ ll -rw-r--r--. 1 root root 0 11月 10 10:10 2016 httpd.lock -rw-r--r--. 1 root root 5 11月 10 10:10 2016 httpd.pid

前回「Apacheログがローテート後に更新されない」の件名で質問させていただきました。

###補足情報2

SELinuxは有効です(Enforcing)。

/var/log/audit/audit.log に関しては、例えば以下の行がありました。

type=SYSCALL msg=audit(1477494121.309:502): arch=c000003e syscall=62 success=yes exit=0 a0=ddd a1=0 a2=0 a3=7fff7317ea50 items=0 ppid=9378 pid=9386 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=20 comm="httpd" exe="/opt/httpd-2.4.23/bin/httpd" subj=system_u:system_r:logrotate_t:s0-s0:c0.c1023 key=(null)

Apache httpd-2.4.23 のインストール方法は、tarball から make install です。

./configure \ --prefix=/opt/httpd-2.4.23 \ --with-mpm=prefork \ --enable-mods-shared=all

/etc/init.d/httpd に関しては、
デフォルトの状態から、ファイルのパスを変更したのみです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2016/11/11 06:08

もし、SELinux が有効(Enforcing)であれば、/var/log/audit/audit.log に /tmp/httpd.pid に関する エラーが出ていないでしょうか? Apache httpd-2.4.23 のインストール方法(tar ball から make install でしょうか?)、 /etc/init.d/httpd スクリプトの内容がわかると再現環境を作れるかもしれません。
H_K

2016/11/11 10:44

補足情報2の項目を追加しました。
guest

回答3

0

logrotateは、root権限で実行されないのでしょうか。

普通はroot権限のはずですが、OSによるかも知れません。/tmp/graceful.out のオーナーはrootですか?

rootで実行されているとすると、SELinuxにより制限されているのでしょう。

投稿2016/11/11 06:06

otn

総合スコア84507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H_K

2016/11/15 01:13

エラーログの権限は以下の通りです。 -rw-r--r--. 1 root root 297 11月 15 04:02 2016 graceful.out ご指摘の通り、SELinuxの影響でした。 ご回答ありがとうございました。
guest

0

切り分けとして、「/sbin/service httpd graceful > /tmp/graceful.out 2>&1」の部分を

sudo /sbin/service httpd graceful > /tmp/graceful.out 2>&1

で試してみてはいかがですか。

事前に/etc/sudoersを編集してapacheユーザに/sbin/serviceコマンドに対してNOPASSWDの設定をしておけばパスワードは聞かれませんので。

投稿2016/11/11 05:51

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H_K

2016/11/15 01:13

SELinuxの影響を確認できました。 検討の結果、SELinuxを無効にして運用します。
guest

0

ベストアンサー

ユーザとグループのアクセス権限のような。。。
下記のようにコマンド入力されると、表示はどうなりますか?

# grep "User apache" /etc/httpd/conf/httpd.conf User apache # ps auxww | grep httpd apache 21529 0.0 6.0 587148 61924 ? S Nov06 6:49 /usr/sbin/httpd ... root 24314 0.0 0.1 356472 1456 ? Ss Nov02 0:43 /usr/sbin/httpd

SElinuxを有効のままで使われる場合は、下記が参考になるかと思います。

http://tech.feedforce.jp/selinux_and_logrotate.html
(申し訳ありませんが、そのままの答えではありません。)

無効にする場合は、SELINUX=の定義を変更してOS再起動

# vi /etc/selinux/config SELINUX=disabled 

投稿2016/11/11 03:38

編集2016/11/12 01:58
nagaetty

総合スコア1106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H_K

2016/11/11 04:53

回答ありがとうございます。 ご教示いただいたコマンドの結果は以下の通りとなりました。 1.$ grep "User apache" /opt/apache2/conf/httpd.conf User apache 2.$ ps auxww | grep httpd root 3588 0.0 1.2 378280 24364 ? Ss Nov10 0:02 /opt/apache2/bin/httpd apache 16837 0.0 0.3 378280 7496 ? S 11:17 0:00 /opt/apache2/bin/httpd apache 16838 0.0 0.6 378976 12400 ? S 11:17 0:00 /opt/apache2/bin/httpd apache 16839 0.0 0.4 378280 7724 ? S 11:17 0:00 /opt/apache2/bin/httpd apache 16840 0.0 0.7 379524 14536 ? S 11:17 0:00 /opt/apache2/bin/httpd apache 16841 0.0 0.4 378280 7724 ? S 11:17 0:00 /opt/apache2/bin/httpd apache 16847 0.0 0.3 378280 7496 ? S 11:17 0:00 /opt/apache2/bin/httpd apache 16850 0.0 0.3 378280 7496 ? S 11:17 0:00 /opt/apache2/bin/httpd 2.において、 2行目以降の時間は、手動でservice httpd gracefulを実行した時間と一致しています。
nagaetty

2016/11/11 06:19

可能であれば、selinux無効化 # setenforce 0 して試してみてくだい。
H_K

2016/11/15 01:18

ご回答、ありがとうございます。 ご教示いただいたURLの記事を参考に、SELinuxの影響である事を確認できました。 検討の結果、SELinuxを無効にして運用し、解決とさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問