티스토리 뷰
[Shell Script] Backup Shell Script
대규모 IDC 근무하며 스위치 Config 백업은 필수다. 필자는 일전에 만들어 놓은 switch 백업 java 프로그램을 리눅스 백업서버에서 cron으로 자동동작하도록 shell script로 만들어 준 후, 텔레그램으로 백업결과를 오전 8시에 받고 있다. 이 포스팅은 switch 백업 java 프로그램을 실행하는 shell script 이다. switch config backup java 프로그램은 아래 링크를 참조 바란다.
1. 2017/12/14 - [Programming/JAVA] - [JAVA] Switch Config Backup Program
#!/bin/bash cd /home/Backup # Before Backup, Clear remained class file. Because The human can edit ConfigBackup.java File. In this script Line 15~16 means restructing Class using ConfigBackup.java. rm -f /home/Backup*.class # If Backuping file remains, Backup is running now. touch Backuping # If log file and RunTimeLog directory doesn't exist, create now. if test ! -f "Backup.log";then touch Backup.log fi if test ! -d "/home/BackupRunTimeLog";then mkdir /home/BackupRunTimeLog fi # Backup Starting!! echo "Start..." >> Backup.log javac -cp ".:/home/Backuplib/commons-net-3.5.jar" ConfigBackup.java java -cp ".:/home/Backuplib/commons-net-3.5.jar" ConfigBackup > /home/BackupRunTimeLog/Running_$(date '+%Y.%m.%d_%H:%M') # drop cache memory after java running sudo echo 3 > /proc/sys/vm/drop_caches # Create Backup log echo "Complete...$(date '+%Y.%m.%d_%H:%M')" >> Backup.log echo "[$(date '+%Y-%m-%d')] Not Backuped Switch List. Check!!" >> Backup.log echo "Total $(ls -lSh /home/BACKUP/$(date '+%Y-%m-%d') | wc -l) Switch Backuped." >> Backup.log ls -lSh /home/BACKUP/$(date '+%Y-%m-%d') | awk '{if($5==0) print}' | awk '{print $(NF)}' | awk -F '.' '{print $1}' >> Backup.log; echo "" >> Backup.log rm -f *.class rm -f Backuping exit 0 |
기본적인 동작과정은 아래와 같다.
1. 백업 시작 전 /home/Backup 디렉토리 내 .class 파일 삭제
cd /home/Backup
# Before Backup, Clear remained class file. Because The human can edit ConfigBackup.java File. In this script Line 15~16 means restructing Class using ConfigBackup.java.
rm -f /home/Backup*.class
2. 백업이 진행되는 동안 백업중임을 알기 위해 Backuping 파일을 새로 생성한다.
# If Backuping file remains, Backup is running now.
touch Backuping
3. Backup.log 가 없다면 Backup.log 파일을 만듦 / BackupRunTimeLog 디렉토리가 없다면 새로 만듦.
# If log file and RunTimeLog directory doesn't exist, create now.
if test ! -f "Backup.log";then
touch Backup.log
fi
if test ! -d "/home/BackupRunTimeLog";then
mkdir /home/BackupRunTimeLog
fi
4. 백업이 시작되며 /home/Backup/lib/commons-net-3.5.jar 외부 라이브러리를 import 하여 ConfigBackup.java java 파일의 클래스를 생성한 후, 백업 과정 중 발생하는 모든 메시지를 /home/BackupRunTimeLog/Running_$(date '+%Y.%m.%d_%H:%M') 에 기록한다.
# Backup Starting!!
echo "Start..." >> Backup.log
javac -cp ".:/home/Backuplib/commons-net-3.5.jar" ConfigBackup.java
java -cp ".:/home/Backuplib/commons-net-3.5.jar" ConfigBackup > /home/BackupRunTimeLog/Running_$(date '+%Y.%m.%d_%H:%M')
5. 프로그램이 실행된 후, cache 메모리를 비운다. (root 권한 필요!)
# drop cache memory after java running
sudo echo 3 > /proc/sys/vm/drop_caches --> moved to root crontab(every day 4:00)
6. 백업 로그를 생성한다. ( 여기서 switch config backup이 저장되는 경로는 /home/BACKUP/$(date '+%Y-%m-%d') 이다. )
# Create Backup log
echo "Complete...$(date '+%Y.%m.%d_%H:%M')" >> Backup.log
echo "[$(date '+%Y-%m-%d')] Not Backuped Switch List. Check!!" >> Backup.log
echo "Total $(ls -lSh /home/BACKUP/$(date '+%Y-%m-%d') | wc -l) Switch Backuped." >> Backup.log
ls -lSh /home/BACKUP/$(date '+%Y-%m-%d') | awk '{if($5==0) print}' | awk '{print $(NF)}' | awk -F '.' '{print $1}' >> Backup.log; echo "" >> Backup.log
7. 백업과정 중 생성된 *.class 파일을 삭제한다.
rm -f *.class
8. 백업중임을 알기 위해 생성된 Backuping 파일을 삭제한다.
rm -f Backuping
그런 다음 cron에 자동 동작하도록 등록해주면 끝~ 필자는 오전 3시에 돌도록 크론을 등록해놓았다.
00 3 * * * /home/Backup/Backup.sh > /dev/null 2>&1
!! 당연히 cron이 실행중이어야 겠쥬?
cron이 돌고 나면 아래와 같이 log가 쌓일 것이다.
# tail Backup.log
Start...
Complete...2018.06.19_03:04
[2018-06-19] Not Backuped Switch List. Check!!
Total 116 Switch Backuped.
SA-20-01
SB-11-21
VIP-04-L3-VM
* /home/Backup 디렉토리에는 평소 아래와 같이 파일/디렉토리가 존재할 것이다.
-rw-rw-r-- 1 Backup Backup 2.3K 6월 19 03:04 Backup.log
-rwx------ 1 Backup Backup 1.6K 6월 7 11:01 Backup.sh*
-rw-rw-r-- 1 Backup Backup 21K 6월 7 10:34 ConfigBackup.java
drwxrwxr-x 2 Backup Backup 4.0K 6월 19 03:00 RunTimeLog/
drwxrwxr-x 2 Backup Backup 4.0K 12월 11 2017 lib/
ls -lSh /home/BACKUP/$(date '+%Y-%m-%d') | awk '{if($5==0) print}' | awk '{print $(NF)}' | awk -F '.' '{print $1}' >> Backup.log; echo "" >> Backup.log
텔레그램을 이용해서 백업 결과를 알람으로 받아보길 원한다면 아래 참조!
3. 2018/06/19 - [Programming/Python] - [Python] Telegram Bot을 이용한 백업결과 전송
'Programming > Shell Script' 카테고리의 다른 글
[Shell Script] 리눅스 쉘 파헤치기 -2. 배시(bash) 쉘 구조 (0) | 2018.08.16 |
---|---|
[Shell Script] 리눅스 쉘 파헤치기 -1. 쉘 소개 (0) | 2018.08.15 |
[Shell Script] 로그 포맷 생성 (0) | 2018.07.27 |
[Shell Script] 리눅스 명령어 실행 결과를 배열에 담기 (0) | 2018.07.27 |
[Shell Script] 리눅스 명령어 실행결과를 변수에 담기 (0) | 2018.07.27 |
- Total
- Today
- Yesterday
- 조던1 사틴
- 이지 부스트 700
- 이지 350 지브라
- 나이키 코르테즈
- selinux 정책설정
- 웹쉘 예방
- selinux 사용법
- 조던1 사틴 블랙토 개봉기
- 파워쉘 문자열 포함 조건
- 리눅스 모니터링
- 리눅스 hostname 변경
- end 응모
- 나이키 켄드릭라마
- linux bridge 설정
- 케니4
- 웹쉘 탐지
- 매치스패션 할인
- 이지 부스트 700 모브
- 웹쉘 해결
- 피파온라인4
- troijan
- CloudStack
- 이지 700 모브
- 파워쉘 문자열
- 배트멍 할인
- 파워쉘 문자열 포함
- Java
- 리니지m 격수 팁
- 조던1 사틴 블랙토
- selinux 설명
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |