cron
과 at
을 사용한 작업 자동화
1. 자동화가 왜 필요할까?
작업 자동화는 Linux에서 특히 중요한 시스템 관리자의 필수 기본 스킬이야. 자동화 없이 작업을 상상해봐: 매일 아침 터미널에 들어가서 똑같은 명령어를 입력해서 데이터를 백업하고, 압축하고, 서버로 전송한 다음 오래된 로그를 정리해야 한다고 상상해봐. 일주일도 안 돼서 직업을 바꾸고 싶어질걸... 하지만 걱정 마, 여기선 우리가 컴퓨터를 네 충실한 하인으로 만드는 방법을 알려줄 거야.
오늘의 강의는 시간과 작업의 마법이야. 운영 체제 수준에서 cron
과 at
라는 놀라운 도구를 사용하여 프로세스를 자동화하는 방법을 배울 거야. 이 유틸리티들은 엄청난 시간을 절약해주고 때로는 신경도 덜 쓰게 만들어줘.
자동화는 모든 반복 작업을 위한 구명 밧줄과 같아. 예를 들어, 매일 아침 8시에 상사를 위한 보고서를 생성하는 스크립트가 있다면, 매번 일찍 일어나서 스크립트를 수동으로 실행할 필요가 없어. (그리고 커피를 들고 있다가 실행하는 걸 잊어버릴 위험도 줄여줘.) 대신에 cron
을 설정해서 이 작업을 자동으로 수행하게 만들 수 있어.
cron
은 정해진 시간에 반복적으로 실행되는 작업을 위한 도구야.
at
는 특정 시간에 한 번만 실행되는 작업을 위한 유틸리티야.
2. cron
작업하기
cron
이 뭔가요?
cron
은 백그라운드에서 실행되며 특정 시간에 프로그램된 작업을 실행하는 데몬 (시스템 프로세스)입니다. 이러한 작업의 일정은 crontab
이라는 텍스트 파일에 저장됩니다. 시스템의 각 사용자는 자신의 crontab
을 가질 수 있습니다.
첫 번째 cron
작업하기
다음은 cron
작업을 위한 기본 명령 모양입니다:
crontab -e
이 명령은 현재 사용자의 crontab
을 열어 편집하게 합니다. 일정 형식을 지정하여 작업을 추가할 수 있습니다.
일정 문법
crontab
의 한 줄은 여섯 개의 필드로 구성됩니다:
* * * * * COMMAND
- - - - -
| | | | └─ 요일 (0–7, 0과 7은 일요일)
| | | └── 월 (1–12)
| | └─── 날짜 (1–31)
| └──── 시 (0–23)
└───── 분 (0–59)
예: 매일 정오에 echo "Hello, Linux"
실행:
0 12 * * * echo "Hello, Linux"
실습: 간단한 작업 실행
당신의
crontab
을 열어 편집하세요:crontab -e
다음 줄을 추가하세요:
*/5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
이 작업은 5분마다 현재 시간을 포함한 문자열을
cron_test.log
파일에 추가합니다. 파일을 저장하고 나가세요.작업이 실행되었는지 확인하세요:
tail -f ~/cron_test.log
5분 후 파일에 새로 추가된 기록을 볼 수 있을 것입니다.
예약된 작업 보기
현재 작업을 확인하려면:
crontab -l
작업 삭제
crontab
에서 모든 작업을 삭제하려면:
crontab -r
cron
의 실제 사용 예
파일 아카이브
예를 들어, 매일 밤 3시에 /var/logs
디렉터리의 파일을 아카이브하려고 한다고 합시다:
스크립트를 작성하세요:
#!/bin/bash tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
crontab
에서 일정 설정:0 3 * * * /path/to/script.sh
이제 백업을 깜빡할 일이 없어요!
시스템 부하 알림
예를 들어, CPU 부하가 80%를 초과하면 경고를 받고 싶을 때:
스크립트를 작성하세요:
#!/bin/bash LOAD=$(uptime | awk '{print $10}' | sed 's/,//') if (( $(echo "$LOAD > 0.80" | bc -l) )); then echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com fi
일정 설정:
*/10 * * * * /path/to/cpu_check.sh
3. at
사용하기
at
은 특정 시간에 한 번만 실행되는 작업을 수행할 수 있어. cron
과는 다르게 at
작업은 반복되지 않아. "내일 아침 9시에 이걸 해야 돼" 같은 작업에 유용해.
at
으로 간단한 작업
다음은 작업을 예약하는 예제야:
echo "echo 'Hello, Linux!'" | at now + 1 minute
이 명령어는 echo 'Hello, Linux!'
명령을 1분 후에 실행시킬 거야.
정확한 시간과 날짜를 지정할 수도 있어:
echo "echo 'Backup completed!'" | at 10:30 AM tomorrow
at
작업 관리
작업을 추가한 후에는 작업 목록을 확인할 수 있어:
atq
출력 예제:
1 Tue Oct 31 10:30:00 2023 a user
2 Tue Oct 31 11:00:00 2023 a user
작업을 삭제하려면:
atrm <job_id>
실습: 알림을 위한 at
사용
2분 후 알림 작업을 생성하세요:
echo "notify-send 'Time is up!'" | at now + 2 minutes
작업 목록을 확인하세요:
atq
2분 후 팝업 창이 나타나는 것을 기다리세요.
4. cron
과 at
사용 시 일반적인 실수
가장 흔한 문제 중 하나는 스크립트나 명령에 잘못된 경로를 지정하는 거야. cron
은 최소한의 환경에서 실행되기 때문에 PATH
같은 환경 변수를 모를 수도 있어. 가장 좋은 방법은 절대 경로를 사용하는 거야.
예를 들어, Python 스크립트를 실행하고 싶다면:
*/30 * * * * /usr/bin/python3 /path/to/script.py
또한 스크립트가 실행 권한을 가지고 있는지 확인해:
chmod +x /path/to/script.sh
이게 어디에 유용할까?
자동화 기술은 IT 관련 거의 모든 직업에서 요구돼. 이 지식을 다음과 같은 곳에 사용할 수 있어:
- 반복적인 시스템 작업 자동화를 위해.
- 주기적인 백업 설정을 위해.
- 서버 상태 모니터링을 위해.
cron
과 자동화에 대해 자주 묻는 면접에서.
DevOps, 시스템 관리 일을 하거나 단순히 생산성을 높이고 싶다면, cron
과 at
이해는 네가 돋보이게 하고 많은 시간을 절약해줄 거야.
이제 Linux가 네 대신 일하게 만드는 법을 알았지. 누군가가 반복적인 작업에 대해 불평할 때, 그냥 미소 지어봐. 왜냐면 넌 자동화의 달인이니까!
GO TO FULL VERSION