>source

크론탭이 있습니다.

* * * * * /home/ipa/web/backup.sh > /dev/null 2>&
1

(여기서 테스트만 하면 1분마다 실행되지 않습니다.)

backup.sh에는 다음이 있습니다.

#!/usr/bin/env sh
sqlite3 /home/ipa/web/ipa_django/mysite/db.sqlite3 ".backup 'backup_file.sqlite3'"
src="/home/ipa/web/backup_file.sqlite3"
let seconds=$(date +%H)*3600+$(date +%M)*60+$(date +%S)
echo $seconds
filename="db.sqlite3"
echo $filename.$seconds
dest="/home/ipa/web/db_backups/"$filename.$seconds
cp  $src $dest
cd /home/ipa/web/db_backups
tar -cvzf ipadbbackup.tar.gz $filename.$seconds
cd /home/ipa/web/
cp /home/ipa/web/db_backups/ipadbbackup.tar.gz ipadbbackup.tar.gz
rm /home/ipa/web/db_backups/$filename.$seconds
rm /home/ipa/web/db_backups/ipadbbackup.tar.gz
#rm "$srcfile"
/usr/bin/bash start-app.sh;
echo "Running email backup"
python2.7 backup_via_email.py
rm ipadbbackup.tar.gz

데이터베이스를 스크래치 영역에 복사하고 압축하여 다른 .py 파일이 찾을 수 있는 위치에 복사한 다음 백업용으로 이메일로 보내는 것이 좋습니다.

문제는 다음과 같습니다.

이 스크립트가 있는 곳에서 이 스크립트를 실행하면: /홈/아이파/웹/

./backup.sh

잘 작동합니다. 이메일에 있는 파일이 잘 작동합니다. db.sqlite3.77627

또는 그렇지 않은 경우... 문제는 cron으로 실행될 때 파일이 완전하지 않고 파일 이름이 다음과 같을 때입니다.

db.sqlite3.

크론으로 실행하면 기본적으로 실패하게 되는지 알 수 없습니다. tar의 파일도 2.1k 더 작습니까? 그래서 무슨 일이 일어나고 있는지 확실하지 않습니다 ... 어디를 봐야할지조차 확실하지 않습니다.

  • 답변 # 1

    대부분의 경우 실제로 실행 중이 아닙니다../backup.sh수동으로 실행할 때보다 오히려배쉬 ./backup.sh.

    쉘을 통해 값을 계산하는 유일한 POSIX 호환 방법은$(( 특급 )).

    대부분의 사람들은 sh와 bash의 차이점을 모르고 깨진 스크립트만 작성하기 때문에 일반적으로 아주 좋은 이유가 없는 한 스크립트는 bash를 사용해야 합니다.

    #!/usr/bin/env bash
    set -e
    set -u
    declare -r db_src="/home/ipa/web/ipa_django/mysite/db.sqlite3"
    declare -r db_bak="/home/ipa/web/backup_file.sqlite3"
    declare -r db_dst="/home/ipa/web/db_backups/db.sqlite3.$[ EPOCHSECONDS % 86400 ]"
    sqlite3 "${db_src}" ".backup 'backup_file.sqlite3'"
    cp "${db_bak}" "${db_dst}"
    cd "$( dirname "${db_dst}" )"
    tar -czf "/home/ipa/web/ipadbbackup.tar.gz" "$( basename "${db_dst}" )"
    rm "${db_dst}"
    echo "Running email backup"
    cd "/home/ipa/web"
    python2.7 backup_via_email.py
    rm ipadbbackup.tar.gz
    

    디버그를 시도할 때 항상 cron 출력을 기록해야 합니다.명령을 찾을 수 없음: 하자어딘가에.

  • 이전 windows : Hyper-v 문제 이벤트 ID 4625. Hyper-v 클러스터
  • 다음 ubuntu : 접미사 "smtpd_recipient_restrictions"에 대한 최적의 매개변수 설정