crontab 실행 부분

crontab 실행 부분

run-partsCentOS 7에서 스크립트를 보고 있습니다 . 다음과 매우 유사합니다.

https://github.com/ikysil/run-parts/blob/master/run-parts

cron.hourly1~300초 사이의 임의 지연을 두고 etc. 디렉토리의 모든 항목을 순차적으로 실행하는 것 같습니다 .

cron.hourly고유한 설정을 위해 실행해야 하는 스크립트가 많이 있습니다 . 나는 그것들이 모두 동시에 실행되기를 원하지만 각각의 실행 전에 임의의 지연이 발생합니다.

그것은 다음과 같습니다:

directory_script_list = contents(/etc/cron.hourly)
for script in directory_script_list:
  if script_is_executeable(script):
    execute(sleep(random(1, 300)) && script) &)

나는 서버가 공격을 받을 때마다 서버가 넘쳐나는 것을 원하지 않으며, 스크립트 중 하나가 다른 스크립트를 차단하는 것도 원하지 않습니다.

이 스크립트는 CPU 로드를 많이 사용하지 않으며 주로 응답이 느린 SNMP 장치에 대한 쿼리를 수행하며, 그 중 많은 장치가 있으며 다양한 방법으로 쿼리됩니다. 일부는 완료하는 데 오랜 시간이 걸리고 일부는 매우 빠릅니다. 네트워크 트래픽도 많지 않습니다. 현재 스크립트가 30개 정도 있는데 자주 추가, 업데이트, 삭제를 하고 있어요.

그런 것이 존재한다는 것을 아는 사람이 있습니까?

답변1

실행 부분은 원하는 것과 매우 유사하므로 실행 부분을 복사하고 필요한 부분에 정확히 맞게 수정할 수 있습니다.

예를 들어:

# cp -a /usr/bin/run-parts /usr/local/bin/run-parts-parallel

그런 다음 이 차이점에서 볼 수 있듯이 /usr/local/bin/run-parts-parallel의 마지막 "fi" 뒤에 "&"를 추가합니다.

# diff -u /usr/bin/run-parts /usr/local/bin/run-parts-parallel 
--- /usr/bin/run-parts  2014-06-09 18:14:31.000000000 -0400
+++ /usr/local/bin/run-parts-parallel   2017-02-03 14:55:11.327000000 -0500
@@ -95,7 +95,7 @@
               { print; }'
        logger -i -p cron.notice -t "run-parts($1)" "finished $(basename $i)"
    fi
-   fi
+   fi &
 done

 exit 0

그런 다음 다음 줄을 변경할 수 있습니다 /etc/cron.d/0hourly.

01 * * * * root run-parts /etc/cron.hourly

도착하다

01 * * * * root RANDOMIZE=1 RANDOMTIME=300 /usr/local/run-parts-parallel /etc/cron.hourly

/etc/sysconfig/run-parts-parallelRANDOM* 변수를 설정하고 crontab 파일에서 제거하도록 스크립트를 수정할 수도 있습니다 . 또는 다른 곳에서 실행 구성 요소를 사용하지 않는 경우 RANDOM* 변수를 넣어 /etc/sysconfig/run-parts무작위 지연을 전역 기본값으로 설정할 수 있습니다.

관련 정보