자동화 배치 셸 편
20339 단어 Linux
최근 에 자동화 배치 스 크 립 트 를 쓰 고 있 습 니 다. 제품 이 10 여 개의 모듈 과 관련 되 기 때문에 모든 모듈 은 배치 해 야 합 니 다. 수 동 배치 가 너무 번 거 롭 고 문제 가 발생 하기 쉬 우 며 필요 한 것 은 스 크 립 트 를 통 해 자동화 배 치 를 실현 해 야 합 니 다. 주요 수요: bat 각본 자동 화 를 통 해 svn, ftp 라 이브 러 리 에서 각 모듈 패키지, 데이터, 권한 수여 파일 등 을 꺼 내야 합 니 다.완전한 설치 배치 패 키 지 를 생 성하 여 인공 가방 이 가 져 오 는 차이성 으로 인 한 각종 문 제 를 줄인다.또한 셸 스 크 립 트 를 통 해 Liux 서버 에 각 모듈 을 자동화 배치 해 야 합 니 다. tomcat, war 패키지 배치, 현장 설정 수정, 데이터 베이스 백업, 업데이트 등 을 포함 하여 배치 의 복잡 도 를 낮 추고 인위적인 오류 수정 설정 등 으로 인 한 문 제 를 줄 여야 합 니 다.
자신 은 이전에 bat 스 크 립 트 와 셸 스 크 립 트 를 거의 써 본 적 이 없 기 때문에 Liux 도 시스템 의 일반적인 조작 명령 만 할 수 있 기 때문에 급 하 게 배 우 며 사용 할 수 밖 에 없 었 습 니 다. 돌 을 만 져 강 을 건 널 수 밖 에 없 었 습 니 다. 다행히 노력 을 한 후에 부탁 을 저 버 리 지 않 고 기능 수 요 를 대체적으로 실현 하 였 습 니 다.현재 최근 몇 년 동안 자신 이 배우 면서 사용 한 bat 스 크 립 트 와 셸 스 크 립 트 두 부분 에 사용 되 는 주요 기능 과 실현 방안 을 정리 하여 기록 을 정리 하여 나중에 찾 아 볼 수 있 도록 합 니 다. 필요 한 학생 들 도 참고 할 수 있 습 니 다.
셸 편
셸 스 크 립 트 압축 해제 성공 여부 판단
unzip -o $src -d $des >/dev/null
if [ $? -eq 0 ]; then
printAndWrite "info: unzip $src successfully!!"
else
printAndWrite "error : unzip $src failed , the storage limited ?"
#exit
fi
unzip - o $src - d e s 압축 을 풀 때 같은 파일 을 직접 덮어 씁 니 다. >/d e v/n u l 은 화면 출력 내용 을 재 설정 으로 차단 합 니 다. des 압축 을 풀 때 같은 파일 을 직접 덮어 씁 니 다. >/dev/null 은 화면 출력 내용 을 재 설정 으로 차단 합 니 다. des 압축 을 풀 때 같은 파일 을 직접 덮어 씁 니 다.>/dev/null 은 화면 출력 내용 을 재 설정 하여 차단 합 니 다.?이전 명령 이 실 행 된 종료 상 태 를 가 져 오 는 것 입 니 다. 0 은 오류 가 없 음 을 표시 하고 다른 값 은 오류 가 있 음 을 표시 합 니 다.
정의 함수: 화면 출력 과 파일 출력 을 동시에 실현 합 니 다.
time=$(date "+%Y%m%d%H%M%S")
#print $info in screen and write in file
function printAndWrite(){
info=$1
echo $info
echo $info >> deploy_log_package_$time.txt
}
주로 배치 과정 에서 의 배치 상황 을 기록 하 는 데 사 용 됩 니 다. >> 는 리 셋 기호 입 니 다. 출력 정 보 를 지정 한 파일 로 추가 로 출력 합 니 다. 이 파일 이 존재 하지 않 으 면 자동 으로 생 성 됩 니 다. > 또한 리 셋 기호 입 니 다. 원본 파일 의 기 존 내용 을 덮어 쓰 는 방식 으로 지정 한 파일 로 출력 하 는 것 과 차이 가 있 습 니 다.
셸 스 크 립 트 ftp 가 져 오기, ftp 에서 자원 자동 으로 가 져 오기
wget -r -nH -nd -q ftp://ftpip:21/xxx/ xxx/xxx/--ftp-user=ftpusername --ftp-password=ftppassword
셸 스 크 립 트 는 대상 폴 더 의 모든 파일 과 폴 더 를 삭제 합 니 다. (신중하게 사용 하고 백업 후 작업 을 권장 합 니 다)
rm -rf $TARGET_DIR/*
셸 스 크 립 트 이동 디 렉 터 리 파일
mv $TARGET_DIR/$module_name $bak_dir
확장: 대상 디 렉 터 리 는 원래 디 렉 터 리 와 일치 합 니 다. 새 파일 이름 을 지 정 했 습 니 다. 효 과 는 이름 만 바 꾸 는 것 입 니 다.
mv /xxx/x.txt /xxx/y.txt
대상 디 렉 터 리 는 원본 디 렉 터 리 와 일치 하지 않 습 니 다. 새 파일 이름 을 지정 하지 않 았 습 니 다. 효 과 는 이동 만 하 는 것 입 니 다.
mv /xxx/x.txt /xxx/yyy/
대상 디 렉 터 리 는 원본 디 렉 터 리 와 일치 합 니 다. 새 파일 이름 을 지 정 했 습 니 다. 효 과 는 이동 + 이름 바 꾸 기 입 니 다.
mv /xxx/x.txt /xxx/yyy/y.txt
셸 스 크 립 트 디 렉 터 리 파일 복사
cp xxx/test.war $TARGET_DIR/xxx/
셸 스 크 립 트 는 폴 더 가 존재 하 는 지 여 부 를 판단 하고 소프트 링크 를 만 듭 니 다.
if [ ! -d $TARGET_DIR/tomcat-9.0.16 ];
then
ln -s $TARGET_DIR/tomcat-9.0.16 $TARGET_DIR/tomcat
printAndWrite "create link $TARGET_DIR/xxxln successfully"
fi
소프트 링크 의 장점: 다른 작업 은 소프트 링크 를 바탕 으로 실 행 될 수 있 습 니 다. 다음 에 원본 파일 이 버 전 업그레이드 등 으로 인해 변경 해 야 할 경우 소프트 링크 만 수정 하면 됩 니 다. 다른 소프트 링크 를 기반 으로 하 는 것 은 움 직 이지 않 아 도 됩 니 다.
셸 스 크 립 트 단계 생 성 디 렉 터 리
mkdir -p xxx/xxx
셸 스 크 립 트 는 파일 이 존재 하 는 지 여 부 를 판단 합 니 다.
if [ -a xxx/xxx.war ];
then
printAndWrite "xxx war is exist"
fi
셸 스 크 립 트 는 폴 더 가 비어 있 는 지 여 부 를 판단 합 니 다.
data_files=`ls $DIR/xxx`
if [ ! -z "$data_files" ];
then
printAndWrite "xxx data is exist"
fi
셸 스 크 립 트 순환
for i in $DIR/xxx/*.zip;
do
unzip -o $i -d $TARGET_DIR/xxx;
done
셸 스 크 립 트 압축 풀기 tar 패키지 지정 디 렉 터 리
tar zvxf $DIR/xxx/xxx.tar.gz -C $TARGET_DIR/xxx/
셸 스 크 립 트 가 파일 의 값 을 읽 습 니 다.
MYSQL_USER=`sed '/^MYSQL_USER=/!d;s/.*=//' $DIR/file.txt`
셸 스 크 립 트 ip 와 포트 교체
sed -ri "s/(http:\/\/)([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)/\1$TESTIP:8899/g" $data_xml
mysql 설치 디 렉 터 리 찾기
MYSQL_DIR="$( ps -aux | grep mysqld | awk '{print$11}'| grep mysqld | sed 's/\/mysqld//' )"
셸 스 크 립 트 백업 데이터베이스, sql 문 구 를 실행 합 니 다.
$MYSQL_DIR/mysqldump -u$MYSQL_USER -p$MYSQL_PWD -h 127.0.0.1 test_db > /xxx/bk.sql
$MYSQL_DIR/mysql -u$MYSQL_USER -p$MYSQL_PWD -h 127.0.0.1 -e 'create database if not exists test_db_bkb'
$MYSQL_DIR/mysql -u$MYSQL_USER -p$MYSQL_PWD -h 127.0.0.1 test_db_bkb < /xxx/bk.sql
셸 스 크 립 트 에서 파일 을 찾 고 검색 결 과 를 가 져 와 화면 에서 파일 로 출력 하고 출력 합 니 다.
return_str=`grep -n "ERROR" log.txt`
if [ ! -z "$return_str" ]
then
printAndWrite "$return_str"
fi
주의 문 구 는 · 포함 되 어 있 습 니 다. 이 문 자 는 자주 사용 하 는 작은 따옴표 가 아 닙 니 다. Esc 키 아래 에 있 습 니 다.
셸 스 크 립 트 는 자동 으로 시작 합 니 다. 이 스 크 립 트 에 아래 문 구 를 추가 하면 이 스 크 립 트 는 자동 으로 시작 할 수 있 습 니 다.
chmod +x $0
chmod +x /etc/rc.d/rc.local
filename=$(basename ${0})
inlocal=$(cat /etc/rc.d/rc.local | grep $filename)
if [ ! -n "$inlocal" ]; then
echo "$cur_path/$filename > /tmp/$filename.log" >> /etc/rc.d/rc.local
echo "success add $(basename ${0}) to rc.local"
else
echo 'success inited'
fi
exit 0
셸 스 크 립 트 는 포트 에 따라 프로 세 스 가 시작 되 었 는 지 여 부 를 판단 합 니 다.
function port_is_started(){
port=$1
COUNT=0
while [ $COUNT -lt 1 ]; do
echo -e ".\c"
sleep 1
COUNT=`netstat -anp|grep $port | grep LISTEN | awk '{print $7}' | wc -l`
if [ $COUNT -gt 0 ]; then
break
fi
done
echo "$port is started!"
}
셸 스 크 립 트 는 포트 에 따라 프로 세 스 를 죽 입 니 다.
function stop_by_port(){
port=$1
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
if [ -n "$pid" ]; then
kill -9 $pid;
sleep 2
fi
}
셸 스 크 립 트 는 큰 파일 을 정리 하거나 다른 작업 을 할 때 모든 사용자 에 게 적 용 됩 니 다.
crontab -e
그리고 i 를 입력 하면 편집 모드 에 들 어가 명령 을 추가 할 수 있 습 니 다.
22 * * * * sh /xxx/clear.sh >> /xxx/clear.sh
자동화, 직접 수정/etc/crontab 파일, 루트 사용자 에 게 만 적용
22 * * * * sh /xxx/clear.sh >> /xxx/clear.sh
셸 스 크 립 트 로그 파일 은 자동 으로 분 리 됩 니 다. 시스템 이 장시간 실 행 된 후 일부 로그 파일 이 공간 을 너무 많이 채 워 시스템 이상 이 etc/logrotate. d 디 렉 터 리 에 설정 파일 을 설치 하지 않도록 합 니 다.
tomcat_catalina
/xxx/tomcat-9.0.16/logs/catalina.out {
daily
rotate 7
missingok
dateext
compress
notifempty
copytruncate
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.