여러 파일을 설정했는데 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
.
예를 들어, 이것이 쉘 스크립트인 경우:
- 평소와 같이 첫 번째 스크립트의 크론을 설정합니다.
sleep 10
10초 후에 실제 실행이 시작되도록 두 번째 스크립트에 추가했습니다 .- 거기에 3분의 1을 더하고
sleep 20
... 등등.