각 스크립트 사이에 10초를 두고 5분마다 여러 스크립트를 크론합니다.

각 스크립트 사이에 10초를 두고 5분마다 여러 스크립트를 크론합니다.

여러 파일을 설정했는데 crontab이 모든 스크립트를 5분마다 실행해야 합니다.
이러한 스크립트에 한 번에 많은 CPU와 IO가 필요하고 시스템을 사용할 수 없게 되면 문제가 발생합니다.

이 효과를 완화하기 위해 각 스크립트 실행 사이에 10초를 두는 옵션이 있는지 알고 싶습니다. 이러한 모든 스크립트에 처리할 데이터가 너무 많으면 크게 증가하는 로드(단일 코어의 경우 40개 이상)를 활용할 수 있어야 합니다.

모든 스크립트에 대해 5분 초에 시작하는 대신 crontab에서 스크립트가 5분마다 실행되도록 예약하는 것이 가능합니까?

답변1

크론 항목을 만듭니다.

*/5 * * * * processA ; sleep 10 ; processB ; sleep 10 ; process C

그러나 나는 이렇게 하지 않는 것이 좋습니다.

cron을 어떻게 사용하는지 전혀 모르겠습니다. 크론은 그렇게 똑똑하지 않습니다. 5분마다 작업을 실행하고 작업을 실행하는 데 6분이 걸리는 경우 2개의 프로세스가 실행됩니다. 결국에는 수십 또는 수백 개의 프로세스가 동시에 실행되게 됩니다.

더 안전한 방법은 cron을 사용하지 않는 것입니다. 대신 이와 같은 스크립트를 실행하십시오. systemd 또는 /etc/init.d 스크립트를 사용하여 항상 실행되는 "서비스"로 전환합니다.

while true ; do
   processA
   sleep 10
   processB
   sleep 10
   processC
   sleep 600
done

더 자세한 설명은 여기에서 확인할 수 있습니다.

크론을 사용하지 않는 방법

답변2

cron에는 초를 선택하는 옵션이 없습니다. 대신 sleep.

예를 들어, 이것이 쉘 스크립트인 경우:

  1. 평소와 같이 첫 번째 스크립트의 크론을 설정합니다.
  2. sleep 1010초 후에 실제 실행이 시작되도록 두 번째 스크립트에 추가했습니다 .
  3. 거기에 3분의 1을 더하고 sleep 20... 등등.

관련 정보