[쉘스크립트] 홀수짝수(일,월) 파일디렉토리 있는지 호스트명등 기본적인것들
리눅스에서 쉘스크립트 사용할때 백업용으로 간단하게 만들때 필요한 부분에 대한 정리 입니다.
몇가지 자주 사용하는것에 대한 부분은 추가 될 예정입니다.
특정 파일을 기준으로 매일 생성되게 한 다음. 이 파일의 특정 용량이상이 아니거나 파일을 날짜가 갱신이 되지 않았거나 하면 관리자에게 문자를 보내는 기능을 별도의 프로그램을 만들어 사용하고 있습니다.
#!/bin/sh
# 서버 호스트명
HOSTNAME=`/bin/hostname`
echo "호스트명: ${HOSTNAME}"
# 서버 날짜
DATE_YMD=`date +%y%m%d`
DATE_DAY=`date +%d`
DATE_MONTH=`date +%m`
# 월요일 1이다 - day of week (1..7); 1 is Monday
WEEK_NUM=`date +%u`
# 저장 디렉토리 - 홀수 작수일
BAK_DIR=even
if [ $WEEK_NUM = "1" -o $WEEK_NUM = "3" -o $WEEK_NUM = "5" -o $WEEK_NUM = "7" ]; then
BAK_DIR=odd
fi
echo ${BAK_DIR}
mkdir -p /backup/${BAK_DIR}
mkdir /backup/${BAK_DIR}/crond
mkdir /backup/${BAK_DIR}/apache
# 디렉토리가 있는지 확인
PWD_DIR=`pwd`
CHK_DIR="${PWD_DIR}/test22"
if [[ -d $CHK_DIR ]]; then
echo "$CHK_DIR 디렉토리가 있습니다."
else
echo "디렉토리가 없어 생성 합니다: $CHK_DIR"
mkdir -p "${CHK_DIR}"
fi
# exit;
# 요일을 숫자로 표현
# if - elif - else fi
if [ $WEEK_NUM = "7" ]; then
echo '일요일 입니다.'
elif [ $WEEK_NUM = "2" ]; then
echo '화요일 입니다.'
else
echo "오늘의 weekNum: $WEEK_NUM"
fi
# 홀수달 짝수달
IS_ODD_MONTH=`expr "${DATE_MONTH}" "%" 2`
if [ ${IS_ODD_MONTH} -eq 0 ]; then
echo "$DATE_MONTH - 짝수 월: $IS_ODD_MONTH"
else
echo "$DATE_MONTH - 훌수 월: $IS_ODD_MONTH"
fi
# 로그 저장 디렉토리 위치
LOG_DIR="/log/"
# 파일이 있는지 확인
# 파일의 복사는 cp 보다는 rsync로 하는것이 더 좋다
# 백업을 위한 명령
CMD_RSYNC="/usr/bin/rsync"
if [[ -e "/bin/rsync" ]]; then
CMD_RSYNC="/bin/rsync"
fi
CMD_RSYNC="$CMD_RSYNC -av --port 873"
echo $CMD_RSYNC
FILE_LS=/usr/bin/ls
FILE_DF=/usr/bin/df
FILE_RSYNC=/usr/bin/rsync
FILE_NETSTAT="/usr/bin/netstat"
if [[ -e "/bin/df" ]]; then
FILE_DF=/bin/df
FILE_NETSTAT="/bin/netstat"
fi
${FILE_DF} -h > /etc/${BAK_DIR}/df.txt
exit
끝부분은 OS 설치에 따라서 기본명령 파일이 설치된 위치가 다른 문제가 있었습니다.
왜? 인지는 알 수 없으나 위치가 달라서 명시적으로 지정을 했더니 안되는 문제 인데요. 이부분은 PATH 설정을 통해서 디렉토리 지정을 하지 않고 실행 시키는 방법이 있습니다.
그리고 이 스크립트가 크론을 통해서 실행이 된다면 크론(cron) 상단에 설정을 해주면 됩니다.
cron을 통해서 실행이 되는 경우는 이 크론의 환경의 영향을 받습니다. 간혹 어떤 프로그램이 쉘에서 테스트 할 때는 잘 되었는데 스케줄러(cron)에선 안된다면 환경을 출력하는 스케줄러를 작성하여 현재 수동으로 실행하는 쉘에서의 환경과 어떤 부분이 다른지 확인해 보면 됩니다.
● 다른 쉘스크립트 참고할 것
- linux 쉘에서 주기적인 모니터링(2초간격 계속 실행) > 리눅스서버