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

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

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

예제와 앞서, 크론에 별(*) 설정을 가르쳐주는 유용한 사이트가 있다!
[여기-//crontab.guru/]

크론 초 단위 실행

분 단위가 기본인데 초단위로 실행이 가능하다고?

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

$cronjob -e

* * * * * /byminute.sh;

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

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






computer and coffee from unsplash.com
출처 : //unsplash.com/@laurenmancke

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

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

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

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


크론탭에 추가하기

$ crontab -e

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

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

run_1.shrun_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 에 프로세스를 입력한 뒤, 프로세스가 죽으면 다시 실행시키도록 하면 된다.

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

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다