web-dev-qa-db-ja.com

cronジョブを同時に実行しても大丈夫ですか?

次のジョブのすべてのファイルを深夜に同時に削除したい

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 

それからすべてを同時に実行しても大丈夫ですか?

用量cronジョブはそれらを段階的に実行しますか?または両方とも同じスレッドにありますか?

2
yael

はい、cronが同時に複数のジョブをスケジュールすることは完全に許容されます。

ただし、コンピューターはnothingを同時に実行し、cronテーブルに存在する順序で起動されます。ただし、それらは順番に実行されません。それらは、真夜中から数ミリ秒以内に次々に開始されます-すべての実用的な目的のために同時に。

3
DopeGhoti

Cronは、すべてのジョブをほぼ同時に開始し、同時に実行します。

ただし、このようなクリーンアップジョブの場合は、短いシェルスクリプトを記述して、プロシージャを順番に実行することをお勧めします。これにより、複数のfindの実行が互いに遅くなるのを防ぐことができます(そして、システムの残りの部分でのディスクアクセスが少し遅くなる可能性があります)。また、cron仕様を変更する(またはmoreを追加する)ことなく、クリーンアップ手順の変更/更新(たとえば、新しいディレクトリの追加やfind基準の変更など)を簡単に行うことができます。 =クリーンアップジョブ)。

例えば、

#!/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または同様のソフトウェアを使用して、代わりにログファイルのメンテナンスを適切に行います。

4
Kusalananda

Cronは、4つのプロセスすべてを深夜に並行して開始します。

1
Ivan Kovtun