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 терпит неудачу
Я отлаживал в течение нескольких часов и сделал следующее:
- перенаправил stderr в стандартный вывод в журнал ошибок
- вызывается
export <PGVAR>заPGPASSWORD,PGUSER,PGHOST, а такжеPGDATABASE - установите мой PATH равным моему PATH, когда я запускаю скрипт вручную в терминале
- использовать абсолютный путь к
pg_dump - использование
#!/bin/bash -lоболочка входа - выход
pg_dumpошибка в файл с... > dump.sql 2> error.log
Оба скрипта работают в терминале при запуске вручную. Я понятия не имею, как еще отладить pg_dump команда, поскольку я не получаю никаких журналов от этого.
2 ответа
Как правило, это происходит потому, что значения переменных среды различны для терминала и cronjobs. Вы можете попробовать импортировать терминальную среду в скрипт. Допустим, вы запускаете скрипт под пользователем root. Попробуйте добавить строку вверху скрипта.
#!/bin/bash
. /root/.profile
Я не совсем уверен, что случилось, но это работает сейчас. Я сделал эти две вещи:
chmod +x pg_backup.sh- Я уже сделал это, и скрипт работал в cron, так как я мог получить некоторый вывод в журналах- бегать
dos2unixв файле для преобразования любого CR или CRLF в LF - я не уверен, как это решит проблему, так как я написал сценарий в Vim на Mac