カメノドットコム
Debian大好きでメインで節操ない感じ。
GMOもわりと好き。
RSS feedly

【Apache2.4】自動起動スクリプトとログローテーション

OS起動時に Apache も起動するように「/etc/init.d/」以下に制御スクリプトを配置して登録します。
また、ログローテーションは毎日行うこととします。

---- [PR] ----
現在契約中 : GMOクラウドのVPS : お名前.com
今後契約するかも : お名前.com VPS
--------------

制御スクリプトの作成と登録

apachectl が便利なので、これを利用してごく簡単なスクリプトにします。
ちなみに Debian系 です。RedHat系 とは微妙に違いますのでご注意ください。

$ sudo vi /etc/init.d/apache24
#!/bin/sh

### BEGIN INIT INFO
# Provides:          Apache2.4
# Short-Description: starts httpd
# Description:       starts the httpd Process Manager daemon
### END INIT INFO

prefix=/usr/local/apache24
apachectl=${prefix}/bin/apachectl

case "$1" in
	start)
		echo -n "Apache2.4 starting."
		$apachectl start
	;;

	stop)
		echo -n "Apache2.4 stopping."
		$apachectl stop
	;;

	restart)
		echo -n "Apache2.4 restart."
		$apachectl restart
	;;

	status)
		$apachectl status
	;;

	configtest)
		echo -n "Apache2.4 config file checking."
		$apachectl configtest
	;;

	*)
		echo "Usage: $0 {start|stop|restart|status|configtest}"
		exit 1
	;;

esac

Apache は制御スクリプトも楽だなー。
自動起動スクリプトとして登録しましょう。

$ sudo update-rc.d /etc/init.d/apache24 defaults

自動起動するようになったら、ログローテーションを行います。

ログローテーションの設定

ローテーションのついでにメール添付で飛ばしてもいいんですが、SFTP でダウンロードできるように変更してみます。
Apache の公開ディレクトリを「/var/www/html」にしましたので「/var/www/logs」に保存して蓄積します。
とりあえず1年分として、ディスクを圧迫するようなら減らしていってください。

$ sudo vi /usr/local/apache24/conf/httpd.conf
$ sudo mkdir /var/www/logs
# エラーログの場所を変更
#ErrorLog "logs/error_log"
ErrorLog "/var/www/logs/error_log"

# アクセスログの場所を変更
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    #CustomLog "logs/access_log" common
    #CustomLog "logs/access_log" combined
    CustomLog "/var/www/logs/access_log" combined
</IfModule>
$ sudo /etc/init.d/apache24 restart

ログローテーションには様々な方法がありますが、今回は「/etc/cron.d/」にファイルを設置することにします。
ここに設置するファイルは「-rw------- 1 root root」でなくてなならないことに注意してください。
毎日00時00分に実行させますが、その前にログローテーションのスクリプトファイルを作成します。
その前に。
cron のログがありませんので、ファイルに書き出すように設定します。

$ sudo vi /etc/rsyslog.conf
# コメントアウトを外す
cron.*    /var/log/cron.log
$ sudo /etc/init.d/rsyslog restart
$ sudo /etc/init.d/cron restart

準備ができましたので、ログローテーションのスクリプトを作成します。
「/usr/local/myscripts」というディレクトリを作成し、その中に「apache24_logrotate.sh」というスクリプトを置くことにします。

$ sudo vi /usr/local/myscripts/apache24_logrotate.sh
#!/bin/bash

# apachectlの場所
apachectl=/usr/local/apache24/bin/apachectl

# ログがあるディレクトリ
log_dir=/var/www/logs

# 前日の日付にする
date=`date -d '1 day ago' '+%Y%m%d'`

# ログの名前を変更する
mv $log_dir/access_log $log_dir/access_log-$date
mv $log_dir/error_log $log_dir/error_log-$date

# Apacheを再起動
$apachectl restart

# ログを圧縮する
gzip -f $log_dir/access_log-$date
gzip -f $log_dir/error_log-$date

# 365日以上前のファイルを削除する
find $log_dir/ -mtime 365 -exec rm -f {} \;
$ sudo chmod +x /usr/local/myscripts/apache24_logrotate.sh

一応まともに動くことは確認していますが、使用する場合は各自テストを行ってください。
このスクリプトを「/etc/cron.d/apache_logrotate」から呼び出します。

$ sudo vi /etc/cron.d/apache_logrotate
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 分 時 日 月 曜日 ユーザ    コマンド
00 00 * * * root /usr/local/myscripts/apache24_logrotate.sh
$ cd /etc/cron.d
$ ls -l
-rw-r--r-- 1 root root 184 Apr  5 07:28 apache_logrotate
$ sudo chmod 600 apache_logrotate
$ ls -l
-rw------- 1 root root 184 Apr  5 07:28 httpd_logrotate
$ sudo /etc/init.d/cron restart

面倒くさいことになりましたが、これで毎日 Apache のログが回せて、デーモンも再起動されます。
ログが大きくなるとパフォーマンスが落ちますので。

Sponsored Link