CentOS 5.6을 사용하고 있습니다. 보안상의 이유로 실제 정보를 허위 정보로 변경해야 하므로 아래 코드에는 오타가 있을 수 있습니다.
백업 파일
#!/bin/bash
set -vx
rm -v /server/temp_db.gz
rm -v /server/temp_ftp.tar
rm -v /server/temp_backup.tar
mysqldump --all-databases | gzip -9 > /server/temp_db.gz
echo "$(date +%H:%M:%S) - finished DB backup"
tar -Pcf /server/temp_ftp.tar /server/public_html/
echo "$(date +%H:%M:%S) - finished FTP backup"
tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
DATE=`date +%A-%b-%d-%Y_%H-%M-%S`
sleep 120
/myfolder/upload.sh $DATE
upload.sh
#!/usr/bin/expect -f
# connect via scp
spawn scp /backup/temp_backup.tar [email protected]:/server/backup.tar
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "mypassword\r"
}
}
interact
(위) 2개의 파일을 만들었습니다.
cd /myfolder/
chmod +x backup.sh
chmod +x upload.sh
./backup.sh
모든 것이 정상입니다. 생성 시간은 temp_backup.tar
이전 타임스탬프보다 2초만 늦습니다. 명령을 수동으로 실행하는 데는 일반적으로 10~20초가 걸립니다.
rm -v /server/temp_db.gz
+ rm -v /server/temp_db.gz
removed `/server/temp_db.gz'
rm -v /server/temp_ftp.tar
+ rm -v /server/temp_ftp.tar
rm: cannot remove `/server/temp_ftp.tar': No such file or directory
rm -v /server/temp_backup.tar
+ rm -v /server/temp_backup.tar
rm: cannot remove `/server/temp_backup.tar': No such file or directory
mysqldump --all-databases | gzip -9 > /server/temp_db.gz
+ mysqldump --all-databases
+ gzip -9
echo "$(date +%H:%M:%S) - finished DB backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:50:16 - finished DB backup'
20:50:16 - finished DB backup
tar -Pcf /server/temp_ftp.tar /server/public_html/
+ tar -Pcf /server/temp_ftp.tar /server/public_html/
echo "$(date +%H:%M:%S) - finished FTP backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:50:19 - finished FTP backup'
20:50:19 - finished FTP backup
tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
+ tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
DATE=`date +%A-%b-%d-%Y_%H-%M-%S`
date +%A-%b-%d-%Y_%H-%M-%S
++ date +%A-%b-%d-%Y_%H-%M-%S
+ DATE=Friday-Dec-16-2011_20-50-24
sleep 120
+ sleep 120
/myfolder/upload.sh $DATE
+ /myfolder/upload.sh Friday-Dec-16-2011_20-50-42
spawn scp /server/temp_backup.tar [email protected]:/backup/backup_Friday-Dec-16-2011_20-50-42.tar
Password:
temp_backup.tar 100% 516MB 23.5MB/s 00:22
이제 cron 작업을 설정했습니다.
* */10 * * * /myfolder/backup.sh 2>&1 > /myfolder/backup.log
cron 작업이 수동으로 실행하는 것과 동일하게 실행되었는지 확인했으며 root
파일 소유자는 root:root
두 파일 모두 권한이 있지만 -rwxr-xr-x
어떤 이유로 여전히 작동하지 않습니다. 다시 한 번 생성 전후의 타임스탬프를 기록해 두세요 backup_temp.tar
. 단 2초 간격입니다.
rm -v /server/temp_db.gz
+ rm -v /server/temp_db.gz
removed `/server/temp_db.gz'
rm -v /server/temp_ftp.tar
+ rm -v /server/temp_ftp.tar
removed `/server/temp_ftp.tar'
rm -v /server/temp_backup.tar
+ rm -v /server/temp_backup.tar
removed `/server/temp_backup.tar'
mysqldump --all-databases | gzip -9 > /server/temp_db.gz
+ mysqldump --all-databases
+ gzip -9
echo "$(date +%H:%M:%S) - finished DB backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:41:05 - finished DB backup'
20:41:05 - finished DB backup
tar -Pcf /server/temp_ftp.tar /server//public_html/
+ tar -Pcf /server/temp_ftp.tar /server/public_html/
echo "$(date +%H:%M:%S) - finished FTP backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:41:07 - finished FTP backup'
20:41:07 - finished FTP backup
tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
+ tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
DATE=`date +%A-%b-%d-%Y_%H-%M-%S`
date +%A-%b-%d-%Y_%H-%M-%S
++ date +%A-%b-%d-%Y_%H-%M-%S
+ DATE=Friday-Dec-16-2011_20-41-09
sleep 120
+ sleep 120
/myfolder/upload.sh $DATE
+ /myfolder/upload.sh Friday-Dec-16-2011_20-39-08
spawn scp /server/temp_backup.tar [email protected]:/backup/backup_Friday-Dec-16-2011_20-39-08.tar^M
Password:
답변1
경로를 확인하세요! cron 작업을 생성할 때 흔히 저지르는 실수는 cron이 실행될 때의 경로가 사용자가 파일을 실행할 때의 경로와 동일하다고 가정하는 것입니다. mysqldump 및 Expect는 상대 경로가 아닌 전체 경로를 제공해야 할 수도 있습니다.