web-dev-qa-db-ja.com

cronジョブを使用してログファイルを削除する

こんにちは。フォルダーから過去7日間のすべてのログファイルを削除し、他のすべてのファイルは残したい。以下のコマンドを使用できますか?拡張子が.logのファイルを削除することをどのように指定しますか?

 find  /path/to/file -mtime +7 -exec rm -f {} \; 

このコマンドをファイルに書き込む必要がありますか、それともコマンドプロンプトに書き込むだけで、毎日自動的に実行させることができますか?

Linuxでcronジョブを実行する方法がわかりません。

14
Harry

ワイルドカードを使用します。そして、それをcrontabに入れるだけで、crontab -eオプションを使用してcrontabジョブを編集します。
例を参照:

  * * * * *  find  /path/to/*.log -mtime +7 -exec rm -f {} \; 

答えを増やすために、Linuxでcrontabを使用する方法に関するこの素晴らしい記事を確認してください。

編集:corntabをcrontabに更新

20
Up_One

personal crontabを編集するには、crontab -eを実行します。これは/var/spool/cron/<username>に保存されます。ファイルは所有者のユーザー名になるため、rootは/ var/spool/cron/rootになります。ファイル内のすべてがファイルの所有者として実行されます。

Crontabの構文は次のとおりです。

Shell=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR Sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

独自のpersonal crontabをcrontab -eを介して編集する場合、ユーザーはファイル名から推測されるため、ユーザー名フィールドは省略します(最初の段落を参照)。

つまり、エントリは次のようになります。

* * * * *  find  /path/to/*.log -mtime +7 -delete

-execオプションが目的どおりに機能する場合は、-deleteオプションを使いすぎないでください。 execはすべてのファイルに対してシェルをforkし、システムリソースに過度に浪費します。

完了したら、crontab -lを使用して個人のcrontabを一覧表示できます。

ps。ほとんどのLinuxシステムのデフォルトエディターはviです。viがわからない場合は、環境変数export EDITOR=nanoを設定してnanoのような単純なものを使用してください。

9
typedeaf
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} \;

Cronジョブを作成するには、以下を含むファイルを/etc/cron.dailyディレクトリに置きます。

#!/bin/sh
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} \;
5
user3392484

Crontabを編集してジョブをスケジュールするには、crontab -eを使用する必要があります。次のようになります。

* 1 * * * /usr/bin/find /path/to/file -name '*.log' -mtime +7 -exec rm -f {} \; 

これにより、ディレクトリ/ path/to/file内のすべての.logファイルが毎日午前1時に再帰的に削除されます。

4
Ben Whaley

これはログファイルに関するものなので、logrotateを確認する必要があります。システムのcronジョブから毎日実行され、通常/etc/logrotate.dディレクトリを含む/etc/logrotate.confファイルのルールに基づいてログをローテーションします。したがって、crontabも検索も必要ありません。

独自の構成のために/etc/logrotate.dにファイルを追加するアクセス権がない場合は、独自のcronジョブを使用することもできます。

/etc/logrotate.dにはたくさんの例があります。

アプリケーションが単一のファイルに書き込むことを想定しています。毎日異なるログファイルにログインするアプリケーション用ではありません。通常、アプリケーションはそれを行う必要はありません。アプリケーションがログファイルを開いたままにしている場合、logrotateはpostrotateスクリプトを実行して、アプリケーションにログファイルを再度開くように指示できます。

2
Marko Kohtala

この特定のトピックについて調べた後、多くの人が-deleteオプションを次のように使用することを推奨していることがわかりました。

* * * * *  find  /path/to/*.log -mtime +7 -delete;  

このバージョンの利点は、覚えやすいことであり、-execはすべてのファイルに対して新しいプロセスを生成するため、パフォーマンスが向上します削除されました。

ここにいくつかの参照があります: https://linuxaria.com/howto/linux-Shell-how-to-use-the-exec-option-in-find-with-examples
https://unix.stackexchange.com/questions/167823/find-exec-rm-vs-delete

0
Milan Nankov

あなたたちはそれをハードな方法でやっています。 clearコマンドを使用してみてください

* * * * 0 clear > /home/user/CronLog.txt:

ここで、0は日曜日、7は土曜日です。 ">"を指定すると、ログが ">>"に追加され、ログに追加されます。ログファイルがルートの場合は、次のように「クリア」の前に「ルート」と入力します。

* * * * 0 root clear > /home/user/CronLog.txt

0
NiteBladeX

これにより、7日より古いログファイルが削除されます

* * * * *  find  /path/to -name '*.log' -mtime +7 -exec rm -f {} \;

これにより、30分より古いログファイルが削除されます

* * * * *  find  /path/to -name '*.log' -mmin +30 -exec rm -f {} \;
0
Atif Tariq