可以同时运行 cron 作业吗?

可以同时运行 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 作业将逐步运行它们?或者它们都在同一个线程上?

答案1

cron是的,同时安排多个作业是完全可以接受的。

计算机做没有什么但是,它们会同时启动,并且将按照表中显示的顺序启动cron。但是,它们不会按顺序运行;它们将在午夜几毫秒内相继启动——出于所有实际目的同时启动。

答案2

Cron 几乎会同时启动所有作业,并且它们会同时执行。

不过,对于此类清理作业,您最好编写一个简短的 shell 脚本来按顺序运行该过程。这将防止多次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

(如果其中一个或多个目录不存在,这也会产生错误,知道这可能有用也可能没有用)

然后,您可以使用 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 个进程。

相关内容