Рейтинг:0

скрипт создает резервную копию базы данных sqlite, при запуске как cron база данных и имена искажаются

флаг in

У меня есть кронтаб:

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

(Нет, он не запускается каждую минуту, просто тестируется здесь)

В backup.sh есть это:

#!/usr/bin/env ш



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"
эхо $filename.$секунд
dest="/home/ipa/web/db_backups/"$filename.$seconds
cp $ источник $ назначения
cd /home/ipa/web/db_backups
tar -cvzf ipadbbackup.tar.gz $filename.$seconds
компакт-диск /дом/ipa/веб/
cp /home/ipa/web/db_backups/ipadbbackup.tar.gz ipadbbackup.tar.gz
rm /home/ipa/web/db_backups/$filename.$seconds
рм /home/ipa/web/db_backups/ipadbbackup.tar.gz
#rm "$srcfile"
/usr/bin/bash start-app.sh;
echo "Выполняется резервное копирование электронной почты"
python2.7 backup_via_email.py
рм ipadbbackup.tar.gz

Идея заключается в том, что я копирую базу данных в резервную область, архивирую ее, копирую туда, где ее может найти другой файл .py, и отправляю по электронной почте в качестве резервной копии.

Проблема в:

Если я запускаю этот скрипт оттуда, где он живет: /главная/ипа/веб/

с ./backup.sh

Он отлично работает, я получаю файл в моей электронной почте, отлично работает: db.sqlite3.77627

или что нет ... проблема в том, что когда он запускается как cron, файл не завершен, а имя файла:

БД.sqlite3.

Я не могу понять, что насчет того, что он работает как cron, что приводит к его сбою? Файл в таре тоже на 2.1к меньше? Так что не знаю, что происходит... даже не знаю, где искать.

Egidijus avatar
флаг nz
Для таких вещей, как резервное копирование, я рекомендую использовать абсолютные пути для двоичных файлов, чтобы убедиться, что вы используете ожидаемую версию. +1 вам следует использовать bash или создать cronjob для печати env vars для отладки того, с чем работает ваш cron, по сравнению с тем, что у вас есть.
Рейтинг:4
флаг gu

Скорее всего, вы на самом деле не работаете ./backup.sh при запуске вручную, а скорее Баш ./backup.sh.

Единственный совместимый с POSIX способ вычисления значения через оболочку — это $(( выражение )).

В общем, если у вас нет очень веской причины, скрипты должны использовать bash, так как большинство людей не знают разницы между sh и bash и просто пишут неработающие скрипты.

#!/usr/bin/env bash

установить -е
установить -у

объявить -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}"
cd "$(имя каталога "${db_dst}" )"
tar -czf "/home/ipa/web/ipadbbackup.tar.gz" "$(базовое имя "${db_dst}" )"
гм "${db_dst}"

echo "Выполняется резервное копирование электронной почты"
cd "/home/ipa/web" 
python2.7 backup_via_email.py
рм ipadbbackup.tar.gz

Всегда обязательно записывайте вывод cron при попытке отладки, я полагаю, вы бы видели команда не найдена: пусть где-то.

Ginnungagap avatar
флаг gu
Мне пришлось напечатать это на своем телефоне, поэтому, пожалуйста, не стесняйтесь исправлять любые ошибки с помощью кнопки редактирования и примите мои извинения заранее за любые, которые я мог сделать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.