환경
A서버 - a.sh 파일 존재 (DB서버)
B서버 - b.sh 파일 존재 (웹서버)


스크립트 파일 내용
a.sh :: A서버에서 DB를 백업하여 FTP를 이용 B서버로 전달
b.sh :: B서버는 A서버로부터 백업파일이 도착하면 그것을 가공하여 자신의 DB에 입력


문제 : B서버에서 crontab 사용이 불가능한 계정. A서버에서 B서버의 b.sh를 작동시켜줘야함.


sshpass 를 이용하여 진행해야하는데, sshpass를 yum으로 설치하거나 centos 등의 경우 yum으로 설치가 불가능하니 아래 링크를 참고하여 설치해야 합니다.

(sshpass 설치는 아래 링크들을 참고하시라)

1. CentOS 64bit 에서 sshpass 설치
http://blog.naver.com/eastee?Redirect=Log&logNo=20172253168
(32bit의 경우 경로를 바꿔주면 됩니다.)


2. 페도라 계열 sshpass 설치
http://jmnote.com/wiki/Sshpass_%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0



a.sh 파일 하단에 이런 내용 추가

sshpass -p PASSWORD ssh -T -oStrictHostKeyChecking=no ID@HOST <<'ENDSSH'

cd 스크립트파일위치

sh b.sh

ENDSSH


그냥 sshpass로 해당 명렁을 바로 실행 했을 경우엔 b.sh가 실행되면서 B서버의 db로 접속하는게 아니라  A서버의 db와 경로를 찾아다니는 경우가 있음.

Posted by 마PD

쉘 스크립트를 이용해서 mysql 쿼리문을 던지고,

그 결과를 한줄씩 출력하기

필요할 경우 응용하여 배열로 쭉쭉 넣을 수도 있음.



#!/bin/bash

TEMP=$(exec mysql -u root -pXXXX -N -s -e "select name for USER")

for i in $TEMP; do

echo "$i"

done


쿼리문 옵션 설명
-N (--skip-column-names) : 결과화면에 컬럼 이름을 없애주는 옵션
-s (--silent) : 결과화면에서 격자를 제거하는 옵션

for문 설명
i 변수에 $TEMP 데이터를 넣고 이 갯수만큼 돌아준다.


출처 : http://devidebyzero.egloos.com/2381744

출처 : http://ksewookk.blog.me/100164818814

출처 : http://10000wo.tistory.com/14

Posted by 마PD

1. 오늘 날자 저장

YEAR=`date +%Y`
MON=`date +%m`
DAY=`date +%d`
HOUR=`date +%H`
MINUTE=`date +%M`

SECONDS=`date +%S`


2. 어제, 내일, 한달전, 일년전 같은건?

DAY=`date -d -8days +%Y%m%d` // 8일전
DAY=`date -d -1months +%Y%m%d` // 한달전
DAY=`date -d -1years +%Y%m%d` // 1년전
DAY=`date -d -30minutes +%Y%m%d` // 30분전 (출력 형식에 분을 안해놨으니 소용 없네)
DAY=`date -d -1hours +%Y%m%d` // 한시간전


Posted by 마PD

-e 옵션이 있었다니...


mysql.sh

#!/bin/bash


query="show databases"


mysql -u root -p(암호붙여서) -e "$query"


Posted by 마PD

더 간단한 방법


ftp.sh

#!/bin/bash


YEAR=`date +%Y`


ftp -n -i IP주소 <<EOF

user ID PW

cd 받을서버의디렉토리


put 보낼파일의절대경로 받을파일명

bye

EOF


퍼온 방법

ftp 옵션
-i : prompt => yes 를 묻지 않음
-v : 서버로 부터 모든 응답을 보여줌
-n : autologin


스크립트 내용

#!/bin/sh
DAT=`date -d "-1 hours" +%Y%m%d-%H`
#20110401-14 형식으로 출력됨
ftp -in (IP주소) << EOF
        user trs trs123   #아이디 비밀번호를 이런식으로 입력함
 bin 
        #prompt   -i 옵션이 prompt 임
        cd /app/TIG/stat/txt/backup/7001
        lcd /log/app/TIG/stat/txt/7001
        mget *.$DAT*    #여러개의 파일을 한꺼번에 다운받음
        bye
EOF



파일 2개를 생성한다.

1. ftp.txt

open IP

user ID PW

prompt off

cd 업로드할 디렉토리

put /root/text.txt text.txt 

bye


put /root/text.xt text.xt

여기서 받는쪽 파일명을 써주지 않았더니 에러가 났었다. -_-;;



2. ftp.sh

#!/bin/bash

ftp -n -v < ftp.txt



그리고 ftp.sh를 실행하면 파일이 넘어간다. 우오오오.

ftp.sh에서 ftp.txt 의 위치를 절대경로로 하는게 좋을듯....

Posted by 마PD