0

私のチームが最近リリースした Rails アプリのログを自動的にローテーションするようにサーバーをセットアップする方法について、何日もオンラインで検索してきました。私は走れるようになっsudo logrotate -f /etc/logrotate.confたが、もちろん、誰がいつもそれをしたいですか?

アプリのログの構成ファイルの内容 (さらに追加したいのですが、まだ 1 つのファイルをローテーションできないため、その必要はありません):

/path/to/app/production.log {
  daily
  missingok
  rotate 7
  compress
  delaycompress
  notifempty
  copytruncate
}

/etc/logrotate.confファイルに次の行が含まれていることを確認しました。

include /etc/logrotate.d

しかし、これは私がどこに行くべきかよくわからない部分です。実際にプロセスを自動化するためのさまざまなアプローチを見つけましたが、どれも機能していないようです。記録のために、サーバーにanacronコマンドがインストールされていることを確認しましたが、自分のプロセス用に構成する方法がわかりません。また、root はまだサーバーに crontab を持っていません (私たちはそれを必要としませんでした) /etc/crontab。ファイルに、/etc/crontab次を追加しました。

15 0 * * *   root    cd / && run-parts --report /etc/cron.daily

しかし、私は他の人が使用しているのを見ました

15 0 * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

後者はより良い選択肢ですか?なんで?もしそうなら、どうすればそれが機能することを確認できますか? 繰り返しますが、当面のタスクにanacronを設定する方法がわかりません。

最後に、/etc/cron.daily/logrotateファイルの以前の内容は次のとおりです。

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
  /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

そして、いくつかの調査の後、私はそれをこれに置き換えました(私はもう少しよく理解しています):

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

誰かが最初の構成が何をしていたのか、これら2つのオプションのどちらが優れているかを説明できますか? 実行するためだけにこのプロセスを強制しなければならない理由がわかりません。/etc/crontab思うように動かないかも?

4

2 に答える 2

1

これを /etc/crontab ファイルに入れてみてください: -*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2> &1

わたしにはできる。

于 2013-02-27T01:54:25.003 に答える
1

後者はより良い選択肢ですか?なんで?

cron コマンドを使用/etc/cron.daily/*すると、コンピューターが真夜中 (00:15) にオンになっている場合にのみ実行されます。一部の人々がそうであるように、夜間に電源を切ると、決して作動しません。

これを回避し、その日の後半にコンピューターを起動したときにコマンドを実行する代わりに、anacron を使用できます。これは明らかに、デスクトップよりもサーバーにとって有用ではありません。

もちろん、ジョブを 1 日に 2 回実行することになるため、両方を同時に使用することは望ましくありません。したがって、最も脆弱なメカニズムである cron は、anacron がインストールされていない場合にのみジョブを実行することで anacron に譲ります。

これは、デフォルトで Debian と Ubuntu がtest -x /usr/sbin/anacron ||crontab ジョブ プレフィックスを使用して行うことです。

すべてのサーバー ディストリビューションには logrotate が正しく設定されているため、crontab、anacrontab、または/etc/cron.daily/logrotate. にファイルを追加するだけです/etc/logrotate.d

于 2013-02-27T00:46:27.540 に答える