Команда BigsqlPostgres pg_dump с использованием крон в Ubuntu не работает
Я использую Ubuntu 16.04 xenial. И на машине с Ubuntu я установил BigsqlPostgres версии 10. Который установлен в каталогах следующим образом:
BigsqlPostgres:
/etc/bigsql/pg10/bin/
/etc/bigsql/data/
Я использую следующие сценарии для создания резервной копии базы данных:
import os, boto3, pytz, sys
parent_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(parent_dir)
from sellerhub_midport.utils.variables import _POSTGRES_HOST, _POSTGRES_PORT, _POSTGRES_USERNAME, _POSTGRES_PASSWORD, _POSTGRES_DBNAME, _AWS_ACCESS_KEY_ID, _AWS_SECRET_KEY, _BUCKET_NAME
from datetime import datetime
class BackupDatabase(object):
"""docstring for BackupDatabase"""
def __init__(self):
super(BackupDatabase, self).__init__()
localtz = pytz.timezone('UTC')
self.filename = 'report'+datetime.now(localtz).strftime('%Y_%m_%d') + '.dump'
self.pathname = 'prod_backup/' + self.filename
self.backup_database()
def backup_database(self):
os.putenv('PGPASSWORD', _POSTGRES_PASSWORD)
os.system('/etc/bigsql/pg10/bin/pg_dump --format=c -h {} -p 5432 -d {} -U {} > {}'.format(_POSTGRES_HOST, _POSTGRES_DBNAME, _POSTGRES_USERNAME, self.filename))
boto3_res = boto3.resource(service_name='s3', aws_access_key_id=_AWS_ACCESS_KEY_ID, aws_secret_access_key=_AWS_SECRET_KEY,)
with open(self.filename, 'rb') as f_obj:
boto3_res.Bucket(_BUCKET_NAME).put_object(Key=self.pathname, Body=f_obj)
os.remove(self.filename)
BackupDatabase()
Если я запускаю файл backup.py в моей виртуальной среде django, он создает файл резервной копии с именем timestamp. Но когда я пишу задание cron для него, оно не работает, я имею в виду не создание резервной копии базы данных, но когда я запускаю этот файл вручную работает нормально. Ниже приведен cron, который я пишу для резервного копирования базы данных.
10 14 * * * /usr/bin/python /home/ekodev/sellerhub_midport/sellerhub_midport/scripts/service_crons/backup_db.py > /tmp/listener.log 2>&1
Я не получаю никаких ошибок в журнале. Если я посмотрю в /tmp/listener.log
это показывает мне, что система в порядке только.
СПАСИБО ДЛЯ ВАШЕГО ДРАГОЦЕННОГО ВРЕМЕНИ.
1 ответ
Если скрипт работает, когда вы выполняете вручную, и не работает, когда исполняете через cron, обычно это означает, что есть разница в переменных окружения.
Я бы предложил сделать переменную среды сценария независимой.
Для устранения неполадок попробуйте определить переменные и значения в скрипте ИЛИ попробуйте распечатать его перед использованием.