Logrotateはrootアクセスなしでは機能しません。

Logrotateはrootアクセスなしでは機能しません。

問題は、サーバーへのルートアクセスが容易ではないことです。そのため、ルートなしでlogrotateを実行するのが非常に便利です。これはオンラインで記事を読んだ後に私がしたことです。

  1. logrotate.confとlogrotate.status 2つのファイルを含む/home/techyman/logrotateディレクトリを作成します。
  2. logrotate.conf に logrotate 構成ファイルを配置します。
/home/techyman/glassfish4/glassfish/domains/*/logs/*.log {
        su techyman techyman
        daily
        copytruncate
        missingok
        rotate 30
        compress
        notifempty
        dateext dateformat -%Y-%m-%d-%s
}
  1. クローンジョブの実行
0 1 * * *  /usr/sbin/logrotate -s /home/techyman/logrotate/logrotate.status /home/techyman/logrotate/logrotate.conf

このサービスは毎日午前1時に運営されています。 1秒ごとにテストするには、* * * * *cronジョブで実行できます。しかし、これはうまくいきません。強制的に実行すると、「状態ファイルの上部に無効な行があります」というメッセージが表示されます。それ以外の場合は何も表示されません。 application.logだけが見えます。

この問題をどのように解決できますか?私は何が間違っていましたか?

削除しましたが、notifemptyまだ動作しません。

その後、削除しましたが、su techyman techymanまだ機能していませんでした。

最後に、これを手動で実行します。しかし、cronジョブはまだ機能していません。

/usr/sbin/logrotate -s /home/techyman/logrotate/logrotate.status  
 -f /home/techyman/logrotate/logrotate.conf

出力head -5 logrotate.status

logrotate state -- version 2
"/home/techyman/glassfish4/glassfish/domains/b/logs/application.log" 2023-11-19-17:46:26
"/home/techyman/glassfish4/glassfish/domains/domain1/logs/application.log" 2023-11-19-17:46:26
"/home/techyman/glassfish4/glassfish/domains/e/logs/application.log" 2023-11-19-17:46:26
"/home/techyman/glassfish4/glassfish/domains/c/logs/application.log" 2023-11-19-17:46:26

私は問題が解決されることを願ってlogrotate.confからそれを削除しましたが、dailyそれでもcronでは動作しません。

答え1

このメッセージはbad top line in state file次のことを示します。状態ファイル(このオプションで指定したファイル-s)は存在しますが、最初の行も存在しません。

logrotate state -- version 1

または

logrotate state -- version 2

このエラーは、ファイルを直接作成した場合にtouch /home/techyman/logrotate/logrotate.status発生します(ファイルが存在しない場合にディレクトリlogrotate権限が許可されている場合は、最初の実行時に自動的に生成され、適切なヘッダー行が自動的に追加されます。)logrotateこのオプションを使用して一度実行すると-f独自に問題を解決することができます。

logrotate状態ファイルを更新すると、最初に新しいファイルが作成され、次に古い状態ファイルに名前が変更されるため、ディレクトリ権限はファイルが状態ファイルディレクトリに作成されるようにする必要があります。logrotateそれ以外の場合、ステータスファイルの更新はまったく機能しません。

また、logrotate(8)マニュアルページで次の点に注意してください。

通常、logrotate毎日のクローンジョブとして実行されます。1日に数回ログを変更しません。ログ基準はログサイズに基づいておらず、logrotateが1日に数回実行される場合、または-fまたは--forceオプションが使用されない限り。

あなたの場合、logrotate.confこのオプションはdailyログが1日1回だけ循環することを指定します。に変更すると、hourly1時間ごとにログを循環させることができますが、logrotate1時間に1回以上実行してもまだ役に立ちません。

ログを1時間に2回以上置き換えるには、すべての時間間隔オプションを削除し、代わりにオプションを指定するsize必要があります。

またlogrotate、毎分実行すると(特にこのオプションが有効になっている場合)、次のジョブが開始されるまで前のジョブが完了しないcompress可能性が高くなります。これが発生しないようにするには、起動時にステータスファイルをロックします。logrotatelogrotate

関連情報