logrotate
私のシェルファイルからコマンドを実行すると、これがどのように機能するのか、それがどのように機能しないのかを理解するのは本当に難しいです。
問題のコマンドは次のとおりです。
rclone -L -vv --log-file "/home/mike/tmp/qqq.log" sync "/media/mike/W10 D drive/My Documents/" remote:MyDocuments_M17A_from_Linux
私が欲しいもの:
qqq.logファイルを頻繁に(たとえば10分ごとに)確認し、そのファイルが指定されたサイズ(たとえば1MB)を超えることを確認したいと思います。その場合、ファイルは回転されます。rclone
この-vv
オプションを使用すると、意図的に多くの出力が生成されます(つまり、logrotateがこのユースケースに適した理由を理解しようとします)。
かなり役に立つチュートリアルがありますここしかし、まだ私に手がかりはありません。
独自の非システムプロセスのログ循環をどのように設定する予定ですか?床に線を付けることを意味しますか
/etc/logrotate.conf
?これが私がしたことです(「#システムごとのログはここで設定できます」)。/home/mike/tmp/qqq.log { notifempty size 1M daily create 0664 root root rotate 3 }
後:今、別のファイルを置くことができることに気づきました。
/etc/logrotate.d
そこでは複雑ではありません。デフォルトでは、
logrotate
このファイルは1日1回だけ実行されますか/etc/cron.daily/logrotate
?これは、より頻繁に確認したい場合は、
cron
このタスクを10分ごとに実行(この場合)するように設定する必要があるという意味ですか?rootとして実行しますか
logrotate <config file>
?ルートとユーザーの両方で試してみたので、この質問をします。ユーザーが仕事をしていないようです。
このタイプの設定(まれではない)への初心者ガイドへのリンクが役立ちます。検索してみましたが、私が見つけたほとんどのコンテンツにはステップバイステップのガイドはありません。
答え1
logrotate
そのユーザーのログを回転させるために、管理者権限を持たずに通常のユーザーとして実行できます。
# Create a local per-user configuration file
cat >.logrotate.conf <<'X'
/home/mike/tmp/qqq.log {
notifempty
missingok
size 1M
rotate 3
}
X
# Run logrotate with that configuration file
/usr/sbin/logrotate -v -s .logrotate.state .logrotate.conf
daily
可能なタスクを1日1回に制限する純粋にサイズベースのチェックを望んでいたので、基準を削除しました(logrotate
状況に応じて1日に最初に実行)。ではなく、実際のジョブで出力ファイルが生成されるようにcreate
置き換えました。missingok
rclone
logrotate
次に、logrotate
ユーザーcrontab
ファイルにコマンドを入力します。
# Capture any existing crontab entries
crontab -l >.crontab
# Append ours to the list
echo '0 * * * * /usr/sbin/logrotate -s .logrotate.state .logrotate.conf >>.crontab.log 2>&1' >>.crontab
# Reload crontab
crontab .crontab
この例では、コマンド出力がに書き込まれます。毎月アイテムを繰り返すかリセット.crontab.log
できます。logrotate
答え2
独自のログファイルを作成してリアルタイムサイズの切り捨てが必要な場合は、Apacheユーティリティを確認する必要があります。ログの回転 ここ。
標準入力を読み込み、コマンドライン引数に基づいてログファイルを分割する方法で機能します。
例えば。
program-writing-to-stdout|/bin/rotatelogs /home/mike/tmp/qqq.log 1M"
ログの回転一方、ログファイルは実行時に確認され、通常、システムは1日に1回(cronを介して)logrotateを実行するように設定されます。サブシステム構成は通常、構成ファイルをサブシステムに入れて実行され、通常は/etc/logrotate.d
rootとして実行されます。
編集者:@mikeげっ歯類
logrotate
(cron経由または手動で)実行し、ファイルシステムに表示されているログファイル統計を確認し、その設定に従って回転をトリガーします。
rotatelogs
標準入力を常に読み込み、ログファイルに追加し、ログファイルの時間またはサイズがトリガポイントに達したら、現在のログファイルを閉じて新しいログファイル(適切な命名)を作成し、それを新しいログファイルに追加し続けます。 。
これは、出力を生成するプログラムを開始する方法に関連しており、標準出力に書き込んでからそれを回転ログにパイプする必要があります。
例えば
while true ; do date ; sleep 30 ; done | rotatelogs -n 10 /home/mike/tmp/qqq.log 60
60秒ごとに切り取り、10個のファイルのループを提供します。
を使用して標準出力に書き込むことができますrclone
。--log-file "/dev/stdout"
[編集2] @mikeげっ歯類
私はrcloneがstdoutに書き込むかstderrに書き込むか、どちらに書くとどうなるかわかりませんが、うまくいかなくてもこの問題を解決する方法があります--log-file=/dev/stdout
。
これStackOverflow質問/回答らはリダイレクトとパイプを説明しました。ただし、要約すると、stderrだけをリダイレクトしたり、stdoutとパイプにマージすることができます。
大きな打撃の例:
stderrとstdoutをパイプにマージする
FirstCommand 2>&1 | OtherCommand
stderrをパイプに入れ、stdoutを別のファイルに入れるだけです(/dev/null、-
stdoutを閉じるハイフンかもしれません)。
FirstCommand 2>&1 1>otherfile.log | otherCommand
この例では、以前の bash 構文を使用し、bash v4 は現代的であまり冗長ではないバリエーションを持っています。