시스템

초 단위 크론 실행 가능할까? “당연!”

ComputerScientist 2020. 10. 26. 12:07

linux 운영체제로 서비스를 관리하다 보면, “초 단위 크론 실행”을 필요로 할 때가 있다.
하지만 리눅스 운영체제에서는 분단위 실행을 기본으로 한다.

그렇다면 어떻게 하면 초단위 실행이 가능할까?

설명하기에 앞서, 크론에서 별(*) 설정을 가르쳐주는 유용한 사이트가 있다! 
참고해볼만한 좋은 사이트 인거같아서 링크걸어둔다.

 

[여기-//crontab.guru/]

 

Crontab.guru - The cron schedule expression editor

loading... Cron job failures can be disastrous! We created Cronitor because cron itself can't alert you if your jobs fail or never start. Cronitor is easy to integrate and provides you with instant alerts when things go wrong. Learn more about cron job mon

crontab.guru

 

 

 

 

크론의 경우 위에서 말한 바와 같이 분 단위 실행이 기본이다

$ cronjob -e

* * * * * /byminute.sh;

의 경우 매 분마다 byminute.sh 파일이 실행 된다.

그렇다면 우선 30초마다 실행시키는 크론 스크립트를 만들어보자.

 

 

 

 

우선, “30 초 단위 크론 실행”을 미리 알아보자

해당 작업을 하려면, 두 가지 방법이 있다. (물론 더 있을 수 있음)

  • “. sh” 파일에 시간 단위 추가하기 (실생활엔 많이 안 쓰임)
  • 크론탭에 추가하기

하지만 sh 파일을 수정하는 건 실생활에서 크게 쓰이지 않는다. (사실 사용해본 적은 없고, 이론적으로만…..)
따라서, .sh 파일에 시간 단위 추가하는 것은 뒤에 설명하기로 하겠다.
(힌트 : .sh 파일에 추가는 while/done sleep 명령으로 실행 가능하다)

 

$ crontab -e

* * * * * /run_1.sh
* * * * * /run_2.sh

 

기본적으로 분 단위 실행 크론이 있다고 가정해보자. 이 두 가지는 어떻게 실행될까?

run_1.sh  run_2.sh 는 동시에 실행될 것이다. 크론에 저렇게 추가되어 있다고 해서,
run_1.sh 가 실행된 뒤 run_2.sh 가 실행되진 않는다. (절때!)
그렇다면 위에 제시된 걸 기준으로,

 

$ crontab -e

* * * * * /run_1.sh
* * * * * sleep 30; /run_2.sh

이렇게 하면 어떻게 될까?

첫 번째 줄과 두번째 줄은 동시에 실행될 것이다. 하지만 두번째 스크립트는 30초간 슬립한 뒤 run_2.sh 를 실행하게 된다. 결론적으로 보자면?

==> 첫번째 run_1.sh 가 실행된 뒤, 30초 뒤에 run_2.sh 가 실행된다.

run_1.sh 를 30초 간격으로 실행시키고 싶다면,

$ crontab -e

* * * * * /run_1.sh
* * * * * sleep 30; /run_2.sh

그렇다면 , 매 5초간은 어떻게 실행시킬까?

 

 

 

 

“5 초 단위 크론 실행”

위의 30초 단위를 예 삼아,

$ crontab -e

* * * * * /run.sh
* * * * * sleep 05; /run.sh
* * * * * sleep 10; /run.sh
* * * * * sleep 15; /run.sh
* * * * * sleep 20; /run.sh
* * * * * sleep 25; /run.sh
* * * * * sleep 30; /run.sh
* * * * * sleep 35; /run.sh
* * * * * sleep 40; /run.sh
* * * * * sleep 45; /run.sh
* * * * * sleep 50; /run.sh
* * * * * sleep 55; /run.sh

를 실행하면 매 5초마다 실행되는 크론이 생성된다.

근데 실생활에서 이렇게까지 쓸까…?

 

 

 

 

“크론을 사용하지 않고 반복 작업”

위에서 sh 파일 수정해서 크론 돌리기이다.

 

$ vim run.sh

echo "hello world" >> log.log

(log.log 파일에 "hello world" 를 스택킹하는 스크립트)

run.sh 스크립트가 위에 제시된 파일이라고 가정하자. (사실 가정할 것도 없다)

5초마다 반복 작업하기 위해서는, 저 쉘 스크립트 파일을

 

$ vim run.sh

while true; do
    echo "hello world" >> log.log
    sleep 5;
done

=============================

$ ./run.sh

 

으로 while 문에 묶기만 하면 된다.

 

저렇게 해두면.. ./run.sh 했을 경우.. 저 스크립트는 종료되지 않는 이상.. 5초간 슬립 하고 hello world를 스택킹하고 5초간 슬립하고 hello world 를 스태킹하는 과정을 반복하게 된다.

다시 한번 말하지만.. 이건 관리 이슈가 있어서 크게 실생활에 사용하진 않는다.
뭐.. 사용하는 사람이 있긴 한데, 스크립트 프로세스가 죽어버리면 곤란하니, supervisord와 같은 유틸리티와 같이 사용한다.

//supervisord.org/


조금 기분적인 설명을 덧 붙이자면, Process watcher 같은 역할을 한다.
supervvisord에 프로세스를 입력한 뒤, 프로세스가 죽으면 다시 실행시키도록 하면 된다.

'시스템' 카테고리의 다른 글

IPFS란?  (0) 2021.12.28