Я установил задание cron для резервного копирования базы данных каждый час.
/ etc / crontab
0 */1 * * * sh /opt/post.sh
/opt/post.sh
pg_dump -U postgres db_name > /home/golp/Desktop/backup.sql
Для аутентификации я использую .pgpass файл.
localhost:5432:db_name:postgres:password
Что касается разрешений,
chmod 0600 ~/.pgpass
chown postgres:postgres /home/golp/Desktop/
Кажется, что задание cron запускается каждый час (я проверил журнал). Я обнаружил, что файл резервной копии, созданный заданием cron, пуст. Я использую CentOS 7 1503 и Postgresql 9.5
НОТА: Когда я бегу pg_dump -U postgres db_name > /home/golp/Desktop/backup.sql
как пользователь root в терминале резервная копия создается должным образом.
Пожалуйста, помогите.
Попробуйте указать полный путь к pg_dump в своем скрипте.
Если вы изменяете файл /etc/crontab
вручную, вам необходимо добавить следующую запись (для пользователя root):
0 * * * * root sh /opt/post.sh
Вам не хватает имени пользователя root
для запуска задания cron как. Это необходимо, потому что это глобальный файл (а не файлы для каждого пользователя в: /var/spool/cron/
).
Редактировать: Чтобы помочь диагностировать ошибки задания cron, вы можете изменить строку задания cron следующим образом:
0 * * * * root sh /opt/post.sh >> /tmp/cron.log 2>&1
Это перенаправит все сообщения stdout и stderr в файл /tmp/cron.log
(режим добавления, чтобы не перезаписывать его каждый раз при запуске задания cron).