같은 시간 자정 이하의 작업에 대한 모든 파일을 삭제하고 싶습니다.
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
(하나 이상의 디렉토리가 존재하지 않는 경우에도 오류가 발생합니다. 이를 알아두면 유용할 수도 있고 그렇지 않을 수도 있습니다)
그런 다음 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개의 프로세스를 모두 병렬로 시작합니다.