cron
cron은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러이다. 소프트웨어 환경을 설정하고 관리하는 사람들은 작업을 고정된 시간, 날짜, 간격에 주기적으로 실행할 수 있도록 스케줄링하기 위해 cron을 사용한다. 셸 명령어들이 주어진 일정에 주기적으로 실행하도록 규정해놓은 crontab (cron table) 파일에 의해 구동된다. 사용자들은 자신들만의 개개의 crontab 파일들을 가질 수 있으며, 가끔은 /etc 또는 /etc의 하위 디렉터리에 시스템 관리자들만이 편집할 수 있는, 시스템 전반에 영향을 미치는 crontab 파일이 존재하는 경우도 있다.
구성 파일
사용자를 위한 구성 파일은 crontab -e를 호출하여 편집할 수 있다.
# ┌───────────── min (0 - 59)
# │ ┌────────────── hour (0 - 23)
# │ │ ┌─────────────── day of month (1 - 31)
# │ │ │ ┌──────────────── month (1 - 12)
# │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute
Plain Text
복사
다음은 cron 사용자의 기본 셸이 본 셸 호환이라는 가정 하에 매일 자정 이후 1분 째에 아파치 오류 로그를 지정 경로에 error_log 파일로 저장한다.
1 0 * * * printf > /var/log/apache/error_log
아래의 예는 매일 20시 (오후 8시)에 export_dump.sh라는 셸 프로그램을 실행한다.
0 20 * * * /home/oracle/scripts/export_dump.sh
crontab
#!/bin/bash
printf "#Architecture: "
uname -a
printf "#CPU physical : "
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
printf "#vCPU : "
cat /proc/cpuinfo | grep "processor" | wc -l
printf "#Memory Usage: "
free --mega | grep "Mem" | awk '{print sprintf("%d/%dMB (%0.2f%%)", $3, $2, $3/$2*100)}'
printf "#Disk Usage: "
df -BM | awk '{a+=$3; b+=$4; c+=$5} END {print sprintf(%d/%dMB (%0.2f%%)", a, a+b, a/(a+b)*100)}'
printf "#CPU load: "
mpstat | awk 'NR==4 {print 100-$NF "%"}'
printf "$Las boot: "
who -b | awk '{print $3, $4}'
printf "#LVM use : "
lsblk | grep lvm | wc -l | awk '{if ($1 > 0) print "yes"; else print "no";}'
ESTB=$(ss -t | grep "ESTB" | wc -l)
printf "#Connection TCP : %s ESTABLISHED\n" ${ESTB}
printf "#User log : "
who | wc -l
IP=$(hostname -I)
MAC=$(ip address | grep "link/ether" | awk '{print $2}')
printf "#Network: IP %s (%s)\n" ${IP} ${MAC}
CMD=$(journalctl | grep TSID | wc -l)
printf "#Sudo : $s cmd\n" ${CMD}
Shell
복사