Назад | Перейти на главную страницу

pg_dump не работает как задание cron в одном скрипте, но не в другом

У меня есть два задания cron на моем сервере AWS (запускается через crontab -e) вызывать pg_dump по конкретным базам данных.

Два сценария идентичны, за исключением целевой базы данных, для которой они создаются ($PG_SRC_DB). Один терпит неудачу в pg_dump команда, но не выводит ни ошибок, ни журналов:

PGPASSWORD=$PG_SRC_PASSWORD $PG_DUMP_PATH --no-owner $PG_SRC_DB -h $PG_SRC_HOST -p $PG_SRC_PORT -U $PG_SRC_USER > dump.sql

Я знаю это, потому что перенаправил все stderr и stdout в /tmp/cron.log и я получаю сообщение об ошибке:

mv: cannot stat 'dump.sql': No such file or directory

Эта команда появляется после того, как я запустил pg_dump и dump.sql файл должен был быть создан, но не удается, потому что pg_dump терпит неудачу

Я отлаживал несколько часов и сделал следующее:

Оба сценария работают в терминале при запуске вручную. Я не знаю, как еще отладить pg_dump команда, так как я не получаю от нее журналы.

Как правило, это происходит из-за того, что значения переменных среды для терминала и cronjobs различаются. Вы можете попробовать импортировать среду терминала в скрипт. Допустим, вы запускаете скрипт под пользователем root. Попробуйте добавить строку вверху скрипта.

#!/bin/bash
. /root/.profile

Я не совсем уверен, что произошло, но теперь это работает. Я сделал две вещи:

  1. chmod +x pg_backup.sh - Я уже сделал это, и скрипт работал в cron, так как я мог получить какой-то вывод в журналах
  2. бегать dos2unix в файле, чтобы преобразовать любой CR или CRLF в LF - я не уверен, как это решит проблему, так как я написал сценарий в Vim на Mac