ホームページ >運用・保守 >Linuxの運用と保守 >Linux の操作とメンテナンス logrotate ログのローテーション - nginx ログのローテーション

Linux の操作とメンテナンス logrotate ログのローテーション - nginx ログのローテーション

齐天大圣
齐天大圣オリジナル
2020-11-12 17:11:452424ブラウズ

Linux システムには非常に便利なローテーション サービスがあります -logrotate。このサービスにより、ログ ファイルをローテーション管理できます。ログ ファイルが大きすぎる場合は、複数の小さなログ ファイルに分割して圧縮できます。 nginx のデフォルトのログ ファイル access.log および error.log ログ ファイルは、単独ではローテーションされません。したがって、logrotate は nginx ログをローテーションするためによく使用されます。

logrotate

logrotate プログラムの実行は、システムのスケジュールされたタスクで毎日実行されます。

# cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status
……

次に、logrotate の設定ファイル /etc/logrotate.conf を見てみましょう。

# 通过man logrotate查看更多信息

# 下面是默认配置
weekly <=== 默认一周进行一次轮替操作
rotate 4 <=== 默认保存4份日志文件
create <==== 当轮替完成后,创建一个新的日志文件
dateext <=== 轮替的文件名前加上日期以便管理
#compress  <=== 默认对轮替的文件不进行压缩,如果想压缩,就把#去掉

#将/etc/logrotate.d目录下的文件加载进来
include /etc/logrotate.d


# 下面是两个日志文件轮替的规则
/var/log/wtmp {  <=== 指定文件名
    monthly <=== 一个月进行一次轮替
    create 0664 root utmp <=== 新的日志文件权限及所有人,所属组设置
 minsize 1M <=== 日志文件至少有1M时候才进行轮替
    rotate 1  <=== 只保留一份日志文件
}

/var/log/btmp {
    missingok <=== 如果日志文件不存在,则不报错,直接忽略
    notifempty <=== 如果日文文件是空的则不进行轮替
    monthly
    create 0600 root utmp
    rotate 1
}

logrotate の設定ファイルを理解したら、ローテーションの練習用に自分でログを作成できます。まず、ログ ファイルを準備します

# ll logrotate_learn.log 
-rwx------ 1 www www 223288003 Nov 12 09:05 logrotate_learn.log

ここでは、新しいコンテンツのみを追加できるように、ログ ファイルに -a 属性を追加することをお勧めします。

# chattr +a logrotate_learn.log

次に、ログ ファイルのローテーション ルールについて考えなければなりません。ここでは、1週間に1回ローテーションとローテーションを行い、ファイルサイズが10Mを超えた場合のみローテーションを行い、ログファイルを7つ保存することにします。ここで、もう一つ注意すべき点があります。ファイルには a 属性があるため、ローテーション前に a 属性を削除し、ローテーション完了後に a 属性を追加する必要があります。したがって、構成ルールを記述する必要があります

vim /etc/logrotate.d/logrotate_learn

# 轮替练习
/root/logrotate_learn.log
{
    missingok
    notifempty
    weekly
    rotate 7
    size=10M
    create 0700 www www
    compress 
    sharedscripts
    prerotate
       /usr/bin/chattr -a /root/logrotate_learn.log
    endscript
    sharedscripts
    postrotate
        /usr/bin/chattr +a /root/logrotate_learn.log
    endscript
}

さて、ローテーションを実行しましょう。

# logrotate [-vf] logfile 
选项与参数:
-v :启动显示模式,会显示logrotate 运作的过程喔!
-f :不论是否符合,强制每个日志文件都进行rotate 的动作!

# logrotate -v /etc/logrotate.d/logrotate_learn 
reading config file /etc/logrotate.d/logrotate_learn
Allocating hash table for state file, size 15360 B
……

# ll logrotate_learn.log*
-rwx------ 1 www www        0 Nov 12 10:15 logrotate_learn.log
-rwx------ 1 www www 20974585 Nov 12 10:15 logrotate_learn.log.1.gz


nginx ログ ファイルのローテーション管理を実行する

学習後のログ ファイルのローテーション管理を実行する方法 最後に、これから実戦訓練に入ります。

# ll /www/wwwlogs/
total 1852452
-rwx------ 1 www www    350288 Nov 12 02:50 access.log
-rwx------ 1 www www  14016937 Nov 11 22:44 isunshinenet.com.error.log
-rwx------ 1 www www 300416647 Nov 11 22:44 isunshinenet.com.log
-rwx------ 1 www www         0 Sep 30 09:57 nginx_error.log

これら 4 つのログ ファイルをローテーションで管理する必要があるので、まず設定ファイルを作成します。

# 对nginx日志文件进行呢轮替
/www/wwwlogs/access.log
/www/wwwlogs/nginx_error.log
/www/wwwlogs/isunshinenet.com.error.log
/www/wwwlogs/isunshinenet.com.log
{
    missingok
    notifempty
    daily
    rotate 7
    size=1M
    create 0700 www www
    sharedscripts
    postrotate
 if [ -f /www/server/nginx/logs/nginx.pid ];then
    /www/server/nginx/sbin/nginx -s reload  
 fi
    endscript
}

これで nginx ログのローテーション管理が完了しました。毎日システムが自動で検出し、ローテーションが必要な場合にはローテーション管理が行われます。

以上がLinux の操作とメンテナンス logrotate ログのローテーション - nginx ログのローテーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。