Score:0

สคริปต์สำรองฐานข้อมูล sqlite เมื่อรันเป็น cron ฐานข้อมูลและชื่อจะสับสน

ธง in

ฉันมี crontab:

 * * * * * /home/ipa/web/backup.sh > /dev/null 2>&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"
ให้วินาที=$(วันที่ +%H)*3600+$(วันที่ +%M)*60+$(วันที่ +%S)
สะท้อน $ วินาที
ชื่อไฟล์ = "db.sqlite3"
echo $filename.$seconds
dest="/home/ipa/web/db_backups/"$filename.$วินาที
cp $src $ปลายทาง
ซีดี /home/ipa/web/db_backups
tar -cvzf ipadbbackup.tar.gz $ชื่อไฟล์.$วินาที
ซีดี /โฮม/ipa/เว็บ/
cp /home/ipa/web/db_backups/ipadbbackup.tar.gz ipadbbackup.tar.gz
rm /home/ipa/web/db_backups/$filename.$วินาที
rm /home/ipa/web/db_backups/ipadbbackup.tar.gz
#rm "$srcfile"
/usr/bin/bash start-app.sh;
echo "กำลังสำรองข้อมูลอีเมล์"
python2.7 backup_via_email.py
rm ipadbbackup.tar.gz

แนวคิดคือฉันคัดลอกฐานข้อมูลไปยังพื้นที่เริ่มต้น ซิปขึ้น คัดลอกไปยังตำแหน่งที่ไฟล์ .py อื่นสามารถค้นหาได้ และส่งอีเมลออกไปเป็นข้อมูลสำรอง

ปัญหาคือ:

ถ้าฉันเรียกใช้สคริปต์นี้จากที่ที่มันอยู่: /บ้าน/ipa/เว็บ/

ด้วย ./backup.sh

ใช้งานได้ดี ฉันได้รับไฟล์ในอีเมลใช้งานได้ดี: db.sqlite3.77627

หรือไม่ ... ปัญหาคือเมื่อรันเป็น cron ไฟล์ไม่สมบูรณ์และชื่อไฟล์คือ:

db.sqlite3.

ฉันไม่สามารถเข้าใจได้ว่ามันทำงานอย่างไรเนื่องจาก cron ทำให้มันล้มเหลวเป็นหลัก? ไฟล์ใน tar นั้นเล็กกว่า 2.1k ด้วย? ไม่แน่ใจว่าเกิดอะไรขึ้น ... ไม่แน่ใจว่าจะดูที่ไหน

Egidijus avatar
nz flag
สำหรับสิ่งต่างๆ เช่น การสำรองข้อมูล ฉันแนะนำให้ใช้พาธสัมบูรณ์สำหรับไบนารี เพื่อให้แน่ใจว่าคุณกำลังใช้เวอร์ชันที่คาดไว้ +1 คุณควรใช้ bash หรือสร้าง cronjob เพื่อพิมพ์ env vars เพื่อดีบักสิ่งที่ cron ของคุณใช้ เทียบกับสิ่งที่คุณมี
Score:4
ธง gu

เป็นไปได้มากว่าคุณไม่ได้วิ่งจริงๆ ./backup.sh เมื่อเรียกใช้ด้วยตนเอง แต่ค่อนข้าง ทุบตี ./backup.sh.

วิธีเดียวที่สอดคล้องกับ POSIX ในการคำนวณค่าผ่านเชลล์คือ $(( หมดอายุ )).

โดยทั่วไปแล้ว สคริปต์ควรใช้ bash เว้นแต่คุณจะมีเหตุผลที่ดี เนื่องจากคนส่วนใหญ่ไม่ทราบความแตกต่างระหว่าง sh และ bash และจะเขียนสคริปต์ที่ใช้งานไม่ได้

#!/usr/bin/env ทุบตี

ตั้ง -e
ตั้ง -u

ประกาศ -r db_src="/home/ipa/web/ipa_django/mysite/db.sqlite3"
ประกาศ -r db_bak="/home/ipa/web/backup_file.sqlite3"
ประกาศ -r db_dst="/home/ipa/web/db_backups/db.sqlite3.$[ EPOCHSECONDS % 86400 ]"
 
sqlite3 "${db_src}" ".backup 'backup_file.sqlite3'"
cp "${db_bak}" "${db_dst}"
ซีดี "$( dirname "${db_dst}" )"
tar -czf "/home/ipa/web/ipadbbackup.tar.gz" "$( ชื่อฐาน "${db_dst}" )"
rm "${db_dst}"

echo "กำลังสำรองข้อมูลอีเมล์"
ซีดี "/โฮม/ipa/เว็บ" 
python2.7 backup_via_email.py
rm ipadbbackup.tar.gz

ตรวจสอบให้แน่ใจเสมอว่าได้บันทึกเอาต์พุต cron ของคุณเมื่อพยายามดีบัก ฉันเดาว่าคุณคงเคยเห็น ไม่พบคำสั่ง: ให้ ที่ไหนสักแห่ง.

Ginnungagap avatar
gu flag
ฉันต้องพิมพ์สิ่งนี้บนโทรศัพท์ของฉัน ดังนั้นโปรดอย่าลังเลที่จะแก้ไขข้อผิดพลาดใดๆ ผ่านปุ่มแก้ไข และยอมรับคำขอโทษล่วงหน้าสำหรับสิ่งที่ฉันอาจทำลงไป

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา