cron 스케줄링을 사용할 때 쉘 스크립트가 다르게 실행됩니다.

cron 스케줄링을 사용할 때 쉘 스크립트가 다르게 실행됩니다.

백업 스크립트에 이상한 문제가 있습니다.

먼저 백업 스크립트는 다음과 같습니다.

###########################################################
# CODE BEGINS HERE
###########################################################
#!/bin/bash
# SERVER DATA BACKUP V1.0
#########################
# BACKUP CONFIG
#########################
#Configure the month, date, and day
YEAR=`date +"%Y"` # 2014
MONTH=`date +"%m"` # 10
TODAY=`date +%Y-%m-%d` # 2008-11-14
TODAY_DATE=`date +%d` # 14

# directories to backup to

DATA_BACKUP_PARENT_DIR=/home/user/backups

# Apache Document Root Directory
APACHE_DOCROOT=/var/www/

# MySQL Database config
DB_IP="localhost" 
DB_USER="auser" # 
DB_PASS="apass" # 

PUBLIC_HTML=/home/user/public_html

# Config Dir
CONFIG_DIR="/etc/" # <-- Change this to the path data directory

# Mail report address
EMAIL_ID="[email protected]" 


###########################################################
# DATA BACKUP
###########################################################

# Create and go into backup directory
cd $DATA_BACKUP_PARENT_DIR
if [ ! -d "$TODAY" ]; then
  mkdir $TODAY
fi
cd $TODAY


# Database backup
databases=`mysql --user=$DB_USER --password=$DB_PASS -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
echo "Backing up databases"
for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != _* ]] ; then
    echo "Dumping database: $db"
    mysqldump --force --opt --user=$DB_USER --password=$DB_PASS $db > $db.db
    tar -zcvf $db.tar.gz $db.db
    rm $db.db
    fi
done

echo "Backing up public_html folder"
#Home folder backup
tar -zcf public_html.tar.gz ${PUBLIC_HTML} --exclude='.*' --exclude=/home/user/public_html/software


# /etc backup
#tar -zcf etc.tar.gz /etc

echo "Backing up Apache wwww doc root folder"
# Application and Websites backup
tar -zcf Apache_Doc_Root.tar.gz ${APACHE_DOCROOT}


###########################################################
# Send out mail notifications
###########################################################
# Mail notify

du -shc $DATA_BACKUP_PARENT_DIR/$TODAY/* | mail -s "Backup of server done " ${EMAIL_ID}

###########################################################
# CODE ENDS HERE
#

콘솔에서 스크립트를 수동으로 실행하면 명령이 원활하게 실행되고 적절한 폴더가 모두 생성됩니다. 확인 이메일에는 다음과 같이 명시되어 있습니다.

250M    /home/user/backups/2014-11-19/Apache_Doc_Root.tar.gz
152K    /home/user/backups/2014-11-19/mysql.tar.gz
487M    /home/user/backups/2014-11-19/public_html.tar.gz
201M    /home/user/backups/2014-11-19/mydb.tar.gz
240K    /home/user/backups/2014-11-19/my_site.tar.gz
76K     /home/user/backups/2014-11-19/teo_wordpress.tar.gz
937M    total

cron을 사용하여 이 스크립트를 예약했습니다. 이러한 스크립트는 지정된 시간에 실행되지만 일부 폴더만 백업합니다. 특히 Apache 문서 루트와 public_html만 백업합니다. 해당 이메일은 다음과 같습니다.

250M    /home/teohaik/backups/2014-11-29/Apache_Doc_Root.tar.gz
487M    /home/teohaik/backups/2014-11-29/public_html.tar.gz
737M    total

이것에 대한 생각이 있나요?

미리 감사드립니다!

답변1

크론 구성 파일을 확인하세요.

어쩌면 크론 작업이 모든 것에 액세스할 수 없는 특정 사용자로 실행될 수도 있습니다.

cron이 실행 중일 때 스크립트가 수행하는 작업을 정확하게 볼 수 있도록 로그 파일을 작성하는 것도 현명한 아이디어입니다.

관련 정보