Contents
(Linux)CRON을 활용한 스케줄 작업
   2022년07월22일     3분정도면 다 읽어요     - Comments

[카카오 클라우드 스쿨] Cron을 활용해 스케줄 작업을 예약할 수 있고, git과 연동해 빠른 배포가 가능하다

CRON

  • cron을 통해 작업을 스케줄 할 수 있음
  • 지정된 ‘분’ ‘시’ ‘일’ ‘월’ ‘요일’에 지정한 작업을 수행한다


  • 예시 - 매분마다 hello를 test.txt에 저장하겠다
[root@srv7 ~]# crontab -e
---
* * * * * echo "hello" >> test.txt
---
[root@srv7 ~]# systemctl restart crond


[root@srv7 ~]# cat ~/test.txt
hello
hello
hello
...
  • 예시 - 매분마다 현재 시간과 날짜를 hi.txt에 저장하겠다
    • 셸 상에서 % 앞에 이스케이프 문자 필요함
[root@srv7 ~]# crontab -e
---
* * * * * echo $(date +\%m\%y\%d\%H\%M) >> hi.txt
---
[root@srv7 ~]# systemctl restart crond


[root@srv7 ~]# cat ~/hi.txt
0722221230
0722221231
0722221232
...


  • 예시 - 매분마다 백업을 실행한다
[root@srv7 mail]# crontab -e
---
* * * * * /root/backup.sh
---
[root@srv7 mail]# touch /root/backup.sh
[root@srv7 mail]# chmod +x /root/backup.sh
[root@srv7 mail]# vi /root/backup.sh
---
#!/bin/bash
echo "hello backup" >> /root/backup.txt


바로 확인한 결과
[root@srv7 mail]# cat /root/backup.txt
cat: /root/backup.txt: No such file or directory

1분 후
[root@srv7 mail]# cat /root/backup.txt
hello backup


  • 2분 마다 실행 vs 매시 2분에 실행
매분마다 실행
* * * * *

매시 2분에 실행
2 * * * *

2분마다 실행
*/2 * * * *



깃허브와 CRON 연동하기

  • github에 업로드하면 저절로 서버에 적용되게끔 할 수 있다
    img_38


1. 깃 클론해 보기

[root@srv7 mail]# yum -y install git
내 프로젝트를 **존재하지 않는 경로**에 클론한다
[root@srv7 mail]# git clone https://github.com/passionleader/django-web.git /root/backuptest
[root@srv7 mail]# ls /root/backuptest
README.md
  • 이와 같은 원리로 시간 + 분 디렉터리로 된 경로로 클론함
[root@srv7 mail]# git clone https://github.com/passionleader/django-web.git /root/$(date +\%H\%M)
Cloning into '/root/1351'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

이를 httpd html 디렉터리로 복사해 보기
[root@srv7 mail]# cp /root/1351/* /var/www/html
[root@srv7 mail]# cp /root/1351/* /var/www/html
cp: overwrite ‘/var/www/html/README.md’?

강제로 복붙하기
[root@srv7 mail]# \cp /root/1351/* /var/www/html


2. git에 cron 연동하기

  • 실행 시간은 cron에서 정함, 매 1분마다 clone(데이터 가져오기)을 실행하는 cron을 작성해 보기
    • clone 필요
    • clone된 경로에서 httpd 의 html 경로로 복사하는 명령어 필요
    • httpd 재시작 명령어 필요


  • 우선 http 파일 작성
<div> 이것은 첫번째 파일임 </div>
<h1> 대왕 큰 글자 </h1>


  • crontab 작성
    • crontab: 주기적으로 일정을 진행한다
    • at: 일정을 한 번만 진행하고 끝
[root@srv7 mail]# crontab -e
---
* * * * * /root/backup.sh
---


  • git repo를 clone하는 셸 스크립트 작성
[root@srv7 ~]# vi /root/backup.sh
---
#!/bin/bash
backupdate=$(date +\%H\%M)
git clone https://github.com/passionleader/django-web.git /root/backupdate
\cp /root/backupdate/index.html /var/www/html
systemctl restart httpd
---


  • github에서 html 파일 변경후 서버에 적용되었는지 확인하기
<div> 이것은 첫번째 파일임 </div>

<h1> 대왕 큰 글자 </h1>

<h5>무언가를 추가함<h5>
  • 결과
    1. img_24
    2. img_23
  • 깃허브 수정시 cron을 통해 clone을 수행하여 서버에도 적용됨
  • 비슷한 개념으로 매달 특정 데이터를 압축해서 보내는 일정을 만들어 둘 수 있다