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