【Linux】「/var/log/messages」をログローテーションジョブをcrontabに仕込む
はじめに
「/var/log/messages」を所定の時間にログローテーションするbashスクリプトを作成し、「crontab」に仕込む。
環境
CentOS 7.9.2009
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
#
手順
1.bashスクリプトの作成
2.crontab設定
3.ジョブ動作テスト
※今回は個人の検証環境のため、「rootユーザー」にて実施しております。
1.bashスクリプトの作成
①ログ保存用ディレクトリ作成
ログ保存用のディレクトリを作成する。
mkdir -p /var/log/syslog
ディレクトリが作成できたことを確認。
[root@test syslog]# ls -la
合計 4
drwxr-xr-x. 2 root root 6 9月 18 18:41 .
drwxr-xr-x. 9 root root 4096 9月 18 18:41 ..
[root@test syslog]#
②bashスクリプト格納用ディレクトリ作成
bashスクリプト格納用のディレクトリを作成する。
※bashスクリプトのログ保存先も含めて作成。
mkdir -p /root/script/log
ディレクトリが作成できたことを確認。
[root@minikube ~]# ls -la /root/script/log
合計 0
drwxr-xr-x. 2 root root 6 2月 5 12:48 .
drwxr-xr-x. 3 root root 42 2月 5 12:43 ..
[root@minikube ~]#
作成したディレクトリに移動する。
cd /root/script
③bashスクリプト作成
/root/script
配下にlogrotate-test.sh
を作成
vi /root/script/logrotate-test.sh
※vi
以外にもvim
やVSCode
でもスクリプト編集可能
#!/bin/sh
#「/var/log/messages」をログローテーションするスクリプト
# 日時取得
data=`date "+%Y%m%d_%H%M%S"`
# ログ取得設定
LOGFILE=/root/script/log/logrotate-test_${data}.log
exec >> ${LOGFILE} 2>&1
# ログローテート処理
if [ -e /var/log/messages ]; then
# 「/var/log/messages」ファイルを「/var/log/syslog」へ移動
mv /var/log/messages /var/log/syslog/messages_${data}
# 新しい「/var/log/messages」ファイルを作成
touch /var/log/messages
# 移動したログファイルを圧縮
zip -j /var/log/syslog/messages_${data}.zip /var/log/syslog/messages_${data}
# 移動したログファイルを削除
rm -f /var/log/syslog/messages_${data}
else
# スクリプトの終了
exit
fi
④スクリプトの権限変更
作成したlogrotate-test.sh
に対して、所有者のみに実行権限を付与する。
- 事前確認
所有者「root」に実行権限がないことを確認。
→「rw-」
[root@minikube ~]# ls -la /root/script/logrotate-test.sh
-rw-r--r--. 1 root root 812 2月 5 12:49 logrotate-test.sh
[root@minikube ~]#
- 権限変更
所有者「root」に実行権限を追加。
chmod u+x /root/script/logrotate-test.sh
- 事後確認
所有者「root」に実行権限が付与されたことを確認。
→「rwx」
[root@minikube script]# ls -la /root/script/logrotate-test.sh
-rwxr--r--. 1 root root 812 2月 5 12:49 /root/script/logrotate-test.sh
[root@minikube script]#
2.crontab設定
①crontab事前確認
以下コマンドを実行し、事前にジョブが登録されていないか確認。
crontab -l
実行例)
[root@minikube log]# crontab -l
no crontab for root
[root@minikube log]#
②crontab設定
以下コマンドを実行し、crontabの設定を実施。
crontab -e
毎日、20:00にシェルを実行するよう設定
0 20 * * * /root/script/logrotate-test.sh
※詳しい確認方法は、以下サイトを参照
cron の設定ガイド
①crontab事後確認
以下コマンドを実行し、設定したジョブが登録されていることを確認。
crontab -l
実行例)
[root@minikube script]# crontab -l
0 20 * * * /root/script/logrotate-test.sh
[root@minikube script]#
3.ジョブ動作テスト
20:00以降に結果を確認する。
①ログファイル確認
-
/root/script/log
へ移動
cd /root/script/log
- ログが保存されていることを確認
[root@minikube log]# pwd
/root/script/log
[root@minikube log]# ls -la
合計 4
drwxr-xr-x. 2 root root 48 2月 5 20:00 .
drwxr-xr-x. 3 root root 42 2月 5 12:43 ..
-rw-r--r--. 1 root root 50 2月 5 20:00 logrotate-test_20210205_200001.log
[root@minikube log]#
- ログファイルに処理結果が出力されていることを確認
[root@minikube log]# cat logrotate-test_20210205_200001.log
adding: messages_20210205_200001 (deflated 81%)
[root@minikube log]#
②新しい「/var/log/messages」が作成されていることを確認
/var/log/messages
が存在することを確認。
[root@minikube log]# ls -la /var/log/messages
-rw-r--r--. 1 root root 0 2月 5 20:00 /var/log/messages
[root@minikube log]#
[root@minikube log]# cat /var/log/messages
[root@minikube log]#
③圧縮したログファイルの確認
-
/var/log/message_log_dir
へ移動
cd /var/log/message_log_dir/
-
messages_yyyymmdd_hhmmss.zip
が存在することを確認
[root@minikube message_log_dir]# pwd
/var/log/message_log_dir
[root@minikube message_log_dir]# ls -la
合計 24
drwxr-xr-x. 2 root root 42 2月 5 20:00 .
drwxr-xr-x. 21 root root 4096 2月 5 20:00 ..
-rw-r--r--. 1 root root 20075 2月 5 20:00 messages_20210205_200001.zip
[root@minikube message_log_dir]#
-
messages_yyyymmdd_hhmmss.zip
を解凍する。
unzip messages_20210205_200001.zip
実行結果)
[root@minikube message_log_dir]# unzip messages_20210205_200001.zip
Archive: messages_20210205_200001.zip
inflating: messages_20210205_200001
[root@minikube message_log_dir]#
- 解凍したログファイルが存在することを確認
[root@minikube message_log_dir]# ls -la
合計 128
drwxr-xr-x. 2 root root 74 2月 5 20:08 .
drwxr-xr-x. 21 root root 4096 2月 5 20:00 ..
-rw-r--r--. 1 root root 102951 2月 5 19:10 messages_20210205_200001
-rw-r--r--. 1 root root 20075 2月 5 20:00 messages_20210205_200001.zip
[root@minikube message_log_dir]#
- ファイルの内容を確認
ログがローテーションできていることを確認。
[root@minikube message_log_dir]# cat messages_20210205_200001 | head
Feb 5 18:40:23 minikube kernel: Initializing cgroup subsys cpuset
Feb 5 18:40:23 minikube kernel: Initializing cgroup subsys cpu
Feb 5 18:40:23 minikube kernel: Initializing cgroup subsys cpuacct
Feb 5 18:40:23 minikube kernel: Linux version 3.10.0-957.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 8 23:39:32 UTC 2018
Feb 5 18:40:23 minikube kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=ja_JP.UTF-8
Feb 5 18:40:23 minikube kernel: e820: BIOS-provided physical RAM map:
Feb 5 18:40:23 minikube kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
Feb 5 18:40:23 minikube kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
Feb 5 18:40:23 minikube kernel: BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
Feb 5 18:40:23 minikube kernel: BIOS-e820: [mem 0x0000000000100000-0x00000000f7feffff] usable
さいごに
今回bashスクリプトに初挑戦してみました。
※業務ではPowerShellスクリプトの経験があります。
実際にbashスクリプトを書いてみて、PowerShellスクリプトと違うところがあると感じました。
しかし、慣れれば書けるという印象です。
これからもスクリプト系等、技術系の記事を投稿していきたいと思います!
Discussion