Server🧀/Linux

[Linux] λ¦¬λˆ…μŠ€ λͺ…λ Ήμ–΄ - μž‘μ—… μŠ€μΌ€μ€„λ§ (cron, crontab)

yujindonut 2023. 8. 20. 12:07
728x90

λ¦¬λˆ…μŠ€ μž‘μ—… μŠ€μΌ€μ€„λ§ λͺ…λ Ήμ–΄

단일성 μ˜ˆμ•½ 반볡적 μ˜ˆμ•½
νŠΉμ • μ‹œκΈ°μ— ν•œλ²ˆ μž‘μ—…μ„ μˆ˜ν–‰ 반볡적인 μž‘μ—…μ„ μˆ˜ν–‰
at, atd μ„œλΉ„μŠ€ 이용 cron, crontab μ„œλΉ„μŠ€ 이용

 

at μ„œλΉ„μŠ€μ™€ cron μ„œλΉ„μŠ€λŠ” μ œμ–΄ν•  수 μžˆλŠ” 터미널을 지정받지 λͺ»ν•œλ‹€.

κ²°κ³Όλ₯Ό λ©”μΌλ‘œ λ³΄λ‚΄μ˜€κ±°λ‚˜ λ¦¬λ‹€μ΄λ ‰μ…˜μ„ μ΄μš©ν•΄ 파일둜 μ €μž₯ν•΄μ•Όν•œλ‹€.


Cron λͺ…λ Ήμ–΄

  • νŠΉμ • μ‹œκ°„ λ˜λŠ” νŠΉμ • μ‹œκ°„λ§ˆλ‹€ νŠΉμ •ν•œ μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•˜κ²Œ ν•΄μ£ΌλŠ” λͺ…λ Ήμ–΄
  • Unix 기반 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μœ ν‹Έλ¦¬ν‹°
  • 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹€ν–‰λ˜λ©°, ν•œλ²ˆλ§Œ μ‹œμž‘ν•˜λ©΄ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 계속 μ‹€ν–‰λœλ‹€. crontab을 μ‚¬μš©ν•˜μ—¬ 일정 ν•­λͺ©μ„ 읽고 μž‘μ—…μ„ μ‹œμž‘ν•œλ‹€.
  • μ‚¬μš©μž cronκ³Ό μ‹œμŠ€ν…œ cron λ‘κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄μ§„λ‹€.
    • μ‹œμŠ€ν…œ cron : μ‹œμŠ€ν…œμ—μ„œ 기본적으둜 μ‚¬μš©ν•˜λŠ” cron μ„€μ •
    • μ‚¬μš©μž cron : rootλ‚˜ 일반 μ‚¬μš©μžκ°€ μžμ‹ μ˜ cron 섀정을 직접해 μ‚¬μš©

 

Crontab

  • μŠ€μΌ€μ€„ μ‹œκ°„μ„ μ„€μ • 관리
  • μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ„ μ„€μ • 관리
  • cron table을 쀄여 crontab이라고 λΆ€λ₯Έλ‹€.

 

Cron과 Crontab의 차이

cronκ³Ό crontab은 λ‹΄λ‹Ή 역할이 λ‹€λ₯΄λ‹€.

crontab은 μŠ€μΌ€μ€„ μ‹œκ°„κ³Ό μ‹€ν–‰ν•  파일의 경둜λ₯Ό κ΄€λ¦¬ν•˜κ³  cron은 crontab을 싀행함.

 

 

Crontab κ΄€λ ¨ 파일 경둜

cron이 μ‹€ν–‰ν•  μ„€μ • 파일인 crontab이 μ €μž₯λ˜μ–΄ μžˆλŠ” μž₯μ†ŒλŠ” 각각의 μœ μ €κ°€ κ°œλ³„μ μœΌλ‘œ μž‘μ„±ν•  수 μžˆλŠ” μž₯μ†Œμ™€ root κΆŒν•œμ΄ ν•„μš”ν•œ μž₯μ†Œλ‘œ λ‚˜λˆ μ§„λ‹€.

 

 

Root κΆŒν•œ Crontab μž‘μ„±

/etc/crontab
κ΄€λ¦¬μžκ°€ 직접 μ§€μ •ν•œ μž‘μ—…λ“€μ„ μ„€μ •ν•˜λ©° μž„μ˜μ˜ μ‚¬μš©μž κΆŒν•œμœΌλ‘œ μ‹€ν–‰ν•  수 μžˆλ‹€.
μ‹œμŠ€ν…œ κ΄€λ ¨ μž‘μ—…λ“€μ„ 등둝해 μ‚¬μš©ν•˜λŠ” 곳이닀.

/etc/cron.d ν΄λ”μ•ˆ
μ†Œν”„νŠΈμ›¨μ–΄ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  λ•Œ ν•„μš”ν•œ 주기적인 μž‘μ—…μ„ λ“±λ‘ν•˜λŠ” κ³΅κ°„μœΌλ‘œ μ‚¬μš©ν•œλ‹€.
μž„μ˜μ˜ μ‚¬μš©μž κΆŒν•œμœΌλ‘œ μ‹€ν–‰ν•  수 μžˆλ‹€.

ec2접속을 root둜 ν•œλ‹€μŒ, /etc 경둜둜 κ°€λ©΄ cron이 μžˆλŠ” 것을 μ•Œ 수 μžˆλ‹€.

κ΄€λ¦¬μžμΈ root κΆŒν•œμœΌλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•΄μ•Όν•  경우 /etc/crontab에 μž‘μ„±ν•΄μ•Όν•¨.

 

개인 μœ μ € Crontab

/var/spool/cron/crontabs
μ‹œμŠ€ν…œ κ°œλ³„ μ‚¬μš©μžλ₯Ό μœ„ν•œ crontab 파일이며 일반적으둜 root κ³„μ •μš© ν•˜λ‚˜μ™€ 계정 μ‚¬μš©μžλ‹Ή 1개의 νŒŒμΌμ„ 가진닀.
파일λͺ…은 μ‚¬μš©μžμ˜ 계정λͺ…이며 cron은 이 이름을 λ°”νƒ•μœΌλ‘œ 각 μ„€μ • νŒŒμΌμ— μ§€μ •λœ μž‘μ—…λ“€μ„ μ‹€ν–‰ν•  λ•Œ μ‚¬μš©ν•  UIDλ₯Ό κ²°μ •ν•œλ‹€.
이곳에 μžˆλŠ” μ„€μ • νŒŒμΌλ“€μ€ crontab λͺ…λ ΉμœΌλ‘œ κ΄€λ¦¬ν•œλ‹€.

기본적으둜 crontab은 /var/spool/cron에 μžˆλ‹€.

 

Crontab root κΆŒν•œ μ‹€ν–‰ vs 개인 μ‚¬μš©μž μ‹€ν–‰ 차이점

root κΆŒν•œ crontab μ‹€ν–‰)
/usr/local/bin/script.shλ₯Ό 맀뢄 μ‹€ν–‰ν•˜κ²Œ ν•œλ‹€κ³  κ°€μ •ν•˜μž. /etc/crontab에 μ λŠ”λ‹€λ©΄ μ•„λž˜μ²˜λŸΌ μ λŠ”λ‹€.
* * * * * username /usr/local/bin/script.sh
그리고 μ €μž₯ν•˜λ©΄ μ‹œμŠ€ν…œμ΄ μ•Œμ•„μ„œ 주기적으둜 μ‹€ν–‰ν•΄μ€€λ‹€.

개인 μ‚¬μš©μž crontab μ‹€ν–‰)
crontab -e둜 μ λŠ”λ‹€λ©΄ μ•„λž˜μ²˜λŸΌ μ λŠ”λ‹€.
* * * * * /usr/local/bin/script.sh
그리고 μ €μž₯ν•˜λ©΄ μ‹œμŠ€ν…œμ΄ μ•Œμ•„μ„œ μ£Όμ§€μ μœΌλ‘œ μ‹€ν–‰ν•΄μ€€λ‹€.

rootκΆŒν•œ crontab 파일과 κ°œμΈμ‚¬μš©μž crontab 파일의 문법 μ°¨μ΄λŠ”, μ‚¬μš©μžλ₯Ό λͺ…μ‹œν–ˆλŠ”μ§€λ§Œ 차이가 μžˆλ‹€.
crontab -e의 μ‹€ν–‰ μ‚¬μš©μžλŠ” μž‘μ„±μž μžμ‹ μ΄ λœλ‹€.

Cron λ™μž‘ 방식 및 싀행흐름

  1. λΆ€νŒ…μ„ ν•˜λ©΄, λΆ€νŒ… ν”„λ‘œκ·Έλž¨ init이 λ°±κ·ΈλΌμš΄λ“œμ— λ“±λ‘λ˜κ³  crond 데λͺ¬μ΄ μ‹€ν–‰λœλ‹€.
  2. /etc/crontab을 읽어듀여, μ£ΌκΈ°λ§ˆλ‹€ μ‹€ν–‰λ˜λŠ” cron디렉토리λ₯Ό μ‹€ν–‰ν•˜κ³ , /var/spool/cron을 읽어 μ‚¬μš©μž cron을 μ‹€ν–‰μ‹œν‚¨λ‹€.
  3. 만일 μ„œλ²„κ°€ μ€‘μ§€λ˜λ©΄, anacron을 톡해 μž‘μ—… μˆ˜ν–‰μ„ μœ μ§€μ‹œν‚¨λ‹€
  4. μˆ˜ν–‰ 이λ ₯κ³Ό λ³€κ²½λœ λ‚΄μš©μ— λŒ€ν•œ λ‘œκ·ΈλŠ” /var/log/cron에 κΈ°λ‘λœλ‹€.

 

Crontab 파일 ν˜•μ‹

크둠 μ„€μ •νŒŒμΌμ— 크둠 μž‘μ—…μ„ μ •μ˜ν•œλ‹€.

λΆ„, μ‹œκ°„, 일, μ›” , μš”μΌ, μ‚¬μš©μžλͺ…, μ‹€ν–‰ν•  λͺ…λ Ήμ–΄ 순으둜 κΈ°μž¬ν•œλ‹€.

 

 

Crontab 파일 λ§Œλ“€κΈ° 및 νŽΈμ§‘ν•˜λŠ” 방법

λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ—μ„œ crontab νŒŒμΌμ„ 직접 νŽΈμ§‘ν•  수 μ—†λ‹€. crontab λͺ…령을 μ‚¬μš©ν•˜μ—¬ μ•‘μ„ΈμŠ€ ν•΄μ•Όν•œλ‹€.

 

1. μƒˆ crontab νŒŒμΌμ„ λ§Œλ“€κ±°λ‚˜ κΈ°μ‘΄ νŒŒμΌμ„ νŽΈμ§‘ν•˜λŠ” λͺ…λ Ήμ–΄

$ crontab -e [username]

Username은 crontab νŒŒμΌμ„ λ§Œλ“€κ±°λ‚˜ νŽΈμ§‘ν•  μ‚¬μš©μž κ³„μ •μ˜ 이름을 μ§€μ •ν•œλ‹€. 수퍼 μœ μ € κΆŒν•œ 없이 μžμ‹ μ˜ crontab νŒŒμΌμ„ λ§Œλ“€ 수 μžˆμ§€λ§Œ, root λ˜λŠ” λ‹€λ₯Έ μ‚¬μš©μžμ˜ crontab νŒŒμΌμ„ λ§Œλ“€κ±°λ‚˜ νŽΈμ§‘ν•˜λ €λ©΄ μˆ˜νΌμœ μ € κΆŒν•œμ΄ μžˆμ–΄μ•Όν•œλ‹€.

 

2. crontab νŒŒμΌμ— λͺ…령쀄을 μΆ”κ°€ν•œλ‹€.

 

3. crontab 파일 λ³€κ²½ 사항을 ν™•μΈν•œλ‹€.

$ crontab -l [username]

 

 


Crontab의 μ‹œκ°„ μ„€μ •

기본적으둜 μ•„λž˜μ™€ 같이 곡백으둜 5개의 값을 κ΅¬λΆ„ν•˜μ—¬ μ„€μ •ν•œλ‹€.

* * * * * <shell path>
  1. λΆ„, λͺ‡λΆ„에 싀행할건지 μ„€μ •
  2. μ‹œκ°„, λͺ‡μ‹œμ— 싀행할건지 μ„€μ •
  3. 일, λͺ‡μΌμ— 싀행할건지 μ„€μ •
  4. μ›”, λͺ‡μ›”에 싀행할건지 μ„€μ •
  5. μš”μΌ, 무슨 μš”μΌμ— 싀행할건지 μ„€μ •

μ˜ˆμ‹œ

* * * * * 맀일 1λΆ„λ§ˆλ‹€ μ‹€ν–‰
5 * * * * 맀일 맀 μ‹œκ°„ 05뢄에 μ‹€ν–‰
5 8-20/3 * * * 맀일 8~20μ‹œ 사이 3μ‹œκ°„ κ°„κ²©μœΌλ‘œ 5뢄에 μ‹€ν–‰
0 0 1,15 * * 맀달 1일, 15일 0μ‹œ 0뢄에 μ‹€ν–‰
0,10,17 * * 0,2,3 맀주 일, ν™”, 수 17μ‹œ 00λΆ„κ³Ό 17μ‹œ 10뢄에 μ‹€ν–‰
0 6,12 * * 0,3 수, μΌμš”μΌλ§ˆλ‹€ 06μ‹œ, 12μ‹œμ— μ‹€ν–‰
0 21 * * 1-6 μ›” ~ ν†  21μ‹œ 00뢄에 μ‹€ν–‰

 

728x90