我们要删除午夜同一时间以下作业的所有文件
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 个进程。