同じ時間の真夜中以下のジョブのすべてのファイルを削除したいと思います。
0 0 * * * root [[ -d /var/log/ambari-metrics-collector ]] && find /var/log/ambari-metrics-collector -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete
0 0 * * * root [[ -d /var/log/kO ]] && find /var/log/Ko -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete
0 0 * * * root [[ -d /var/log/POE ]] && find /var/log/POE -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete
0 0 * * * root [[ -d /var/log/REW ]] && find /var/log/REW -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete
これらすべてを同時に実行できますか?
Dosage cronジョブは徐々に実行されますか?それとも、すべて同じスレッドにありますか?
答え1
cron
はい、同時に複数のジョブをスケジュールすることは完全に許可されています。
コンピュータは何もないただし、表に示されている順序で同時に開始されますcron
。ただし、順次実行されるわけではありません。真夜中は互いにミリ秒以内に始まり、すべての実用的な目的のために同時に始まります。
答え2
Cronはほぼ同時にすべてのタスクを開始し、同時に実行します。
ただし、この種のクリーンアップ操作では、プロセスを順番に実行するショートシェルスクリプトを作成することをお勧めします。これにより、複数のfind
実行が互いに遅くなるのを防ぐことができます(システムの残りの部分へのディスクアクセス速度が潜在的にわずかに遅くなる現象)。またfind
、cron仕様を変更または追加することなく、クリーンアッププロセス(新しいディレクトリの追加や変更など)を簡単に変更/更新できます。もっと清掃作業)。
例えば、
#!/bin/bash
for dir in /var/log/{ambari-metrics-collector,k0,POE,REW}; do
[ ! -d "$dir" ] && continue
find "$dir" -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete
done
そうでなければ
#!/bin/bash
find /var/log/{ambari-metrics-collector,k0,POE,REW} -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete
(1つ以上のディレクトリが存在しない場合でもエラーが発生します。これを知っておくと便利かもしれません。)
その後、cronを使用して、システムに適した方法で実行するようにスクリプトをスケジュールできます。
もっと華やかに:
#!/bin/bash
# directories to clean up
dirs=( /var/log/ambari-metrics-collector
/var/log/k0
/var/log/POE
/var/log/REW
)
for dir in "${dirs[@]}"; do
if [ ! -d "$dir" ]; then
printf 'Dir "%s" does not exist, check this!\n' "$dir" >&2
else
printf 'Removing files from "%s":\n' "$dir"
find "$dir" -type f -mtime +10 -regex '.*\.log.*[0-9]$' -print -delete
fi
done
あるいは、このアプローチを完全に放棄し、logrotate
同様のソフトウェアを使用してログファイルのメンテナンスを適切に実行してください。
答え3
Cronは真夜中に4つのプロセスをすべて並列に開始します。