どうも、こんにちは、ディーネットの山田です。
今回はlsyncdのログがsystemdに標準出力されるのを抑制する方法について紹介します。
はまったこととしては、lsyncdで定期的にファイルの同期を行うように設定したのはいいが
lsyncd用のログファイルとは別にlsyncdがsystemdにログを標準出力するためmessages
にも同じログが埋まっていきログを肥大化させることがありました。
この事象は、systemdが使われているCentOS7系で発生しCentOS6系では起きていなくて
対処方法について記載します。
目次
現状の確認からやってきます
環境情報
- OS: CentOS Linux release 7.4.1708 (Core)
- lsyncd: lsyncd-2.2.2-1.el7.x86_64
設定ファイル
# cat /etc/lsyncd.conf settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/tmp/lsyncd", maxProcesses = 4, nodaemon = false, statusInterval = 1, insist = 1 } sync { default.rsync, source = "/demo1/", target = "/demo2/", delete = false, rsync = { archive = true, verbose = true, owner = true, group = true, perms = true, times = true } }
⇒"/demo1/"配下を"/demo2/"配下に同期するような設定です。
lsyncdのログ確認
# cat /var/log/lsyncd/lsyncd.log Wed Jun 6 09:52:07 2018 Normal: Calling rsync with filter-list of new/modified files/dirs /hogehoge2 / Wed Jun 6 09:52:07 2018 Normal: Finished a list after exitcode: 0
⇒同期されたことが確認出来ますね
systemdにも標準出力されることを確認
# systemctl status lsyncd ● lsyncd.service - Live Syncing (Mirror) Daemon Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; disabled; vendor preset: disabled) Active: active (running) since 火 2018-06-05 18:17:51 JST; 15h ago Main PID: 4783 (lsyncd) CGroup: /system.slice/lsyncd.service mq4783 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf 6月 06 09:52:07 localhost lsyncd[4783]: sending incremental file list 6月 06 09:52:07 localhost lsyncd[4783]: ./ 6月 06 09:52:07 localhost lsyncd[4783]: hogehoge2 6月 06 09:52:07 localhost lsyncd[4783]: sent 86 bytes received 34 bytes 240.00 bytes/sec 6月 06 09:52:07 localhost lsyncd[4783]: total size is 0 speedup is 0.00
# cat /var/log/messages | grep "lsyncd:" Jun 6 09:52:07 localhost lsyncd: sending incremental file list Jun 6 09:52:07 localhost lsyncd: ./ Jun 6 09:52:07 localhost lsyncd: hogehoge2 Jun 6 09:52:07 localhost lsyncd: sent 86 bytes received 34 bytes 240.00 bytes/sec Jun 6 09:52:07 localhost lsyncd: total size is 0 speedup is 0.00
⇒ログを見るのが楽しい人ならいいけど、不要な人は少しでも省きたい。
systemdに出力しない方法は?
- lsyncdのserviceファイルに手を加えていきます
変更箇所
# vi /usr/lib/systemd/system/lsyncd.service [Unit] Description=Live Syncing (Mirror) Daemon After=network.target [Service] Type=simple EnvironmentFile=-/etc/sysconfig/lsyncd ExecStart=/usr/bin/lsyncd -nodaemon $LSYNCD_OPTIONS StandardOutput=null [Install] WantedBy=multi-user.target
⇒"StandardOutput=null"を追記して下さい。
設定の再読み込み
# systemctl daemon-reload
lsyncdの再起動
# systemctl restart lsyncd
これで、systemdには標準出力されなくなったはずなので、実際のログを確認していきましょう。
設定変更後のログ確認
lsyncdのログ確認
# cat /var/log/lsyncd/lsyncd.log Wed Jun 6 10:10:47 2018 Normal: Calling rsync with filter-list of new/modified files/dirs /hogehoge3 / Wed Jun 6 10:10:47 2018 Normal: Finished a list after exitcode: 0
⇒こちらのログは、抑制対象外なので出力されているので問題なし
systemdにも標準出力されることを確認
# systemctl status lsyncd ● lsyncd.service - Live Syncing (Mirror) Daemon Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; disabled; vendor preset: disabled) Active: active (running) since 水 2018-06-06 10:07:16 JST; 4min 5s ago Main PID: 6474 (lsyncd) CGroup: /system.slice/lsyncd.service mq6474 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf 6月 06 10:07:16 localhost systemd[1]: Started Live Syncing (Mirror) Daemon. 6月 06 10:07:16 localhost systemd[1]: Starting Live Syncing (Mirror) Daemon...
# cat /var/log/messages | grep "lsyncd:"
⇒怖いぐらい何も出なくなりましたね
備考
あっそうそう、運用上の経験からですが"lsyncd-2.1.5-6.el7.x86_64"の場合
systemdにログが出力されないように、shellで無理やりlsyncdからの標準出力を
捨てているみたいです。
がしかし、lsyncdでのファイル同期が頻繁過ぎるとshellで扱えるメモリを超過したり
メモリリークが発生することが見受けられるので、悩んでいる方はまず最新版にアップ
デートしましょう。
バグレポートが報告されてます。
https://bugzilla.redhat.com/show_bug.cgi?id=1369274sh: /usr/bin/sh: xrealloc: cannot allocate 18446744071562067968 bytes (24576 bytes allocated)
のようなログが出てlsyncdがプロセスダウンする方は必見です。。。