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

pg_dump с использованием планировщика задач Windows

Я немного потерялся в этом. У меня есть несколько баз данных, работающих на экземпляре Postgres, на производственной машине с Windows Server 2008, и я хочу запланировать резервное копирование баз данных.

Все, что мне нужно, - это периодические дампы базы данных. Итак, я создал небольшое приложение .NET, которое загружает файл конфигурации с необходимыми данными для определения местоположения каждой БД и путем для сохранения файла дампа. И это работает хорошо, и, как и ожидалось, я выполняю его вручную через командную строку. Я получаю необходимую обратную связь, и файлы дампа создаются. Приложение динамически создает аргументы команды, а пароль базы данных устанавливается в переменной окружения перед выполнением:

Command Args: -ibv -Z3 -f "C:\Users\Administrator\Desktop\FlamingoRepo\BackupFiles\Cisne\Cisne20100311_104423.backup" -Fc -h localhost -U postgres -p 5432 Cisne

Проблема возникает, когда я пытаюсь запустить то же приложение из TaskScheduler. Я настраиваю планировщик для выполнения .exe приложения, и на вкладке истории говорится, что он выполняется, а что нет, но файл не создается. И вот чего я не могу понять. Я запланировал задачу как администратор (используя учетную запись, с которой я вошел в систему), поставил флажок, связанный с высшими привилегиями, а что нет, но я все еще не получаю никаких выходных данных (т.е. файлов резервных копий), хотя вкладка истории скажет, что он был выполнен и завершен (в последнее время я даже не получаю никакой информации во вкладке истории ..). Я пробовал это на двух машинах (одна стандартная и одна с R2) с тем же результатом.

Любые предложения будут оценены!

Догадаться. Но никогда не ожидал, что это будет так.

Я просмотрел журналы и нашел несколько исключений System.IO.FileNotFound. Оказывается, мой файл настроек (а не .config) неправильно упоминался в коде. В моем файле конфигурации я определил имя файла ("settings.xml") и предположил, что он будет в папке приложений (и это так). Я имел в виду это так:

xdoc.Load(System.Environment.CurrentDirectory.TrimTrailingPathSlash() + "\\" + ConfigurationManager.AppSettings["SettingsFile"]);

Я использую TrimTrailingPathSlash (), чтобы убрать последние косые черты, чтобы убедиться, что я правильно понял. Хотя выполнение приложения напрямую будет работать (и System.Environment.CurrentDirectory предоставит мне правильный путь), при запуске в планировщике задач путь, возвращаемый System.Enviroment.CurrentDirectory, наверняка не был, и я предполагаю, что у него был taskeng.exe и, следовательно, не может найти файл Settings.xml в этой папке.

Я очистил строку и установил полный путь в файле конфигурации, и это сработало.

Очевидно, это ваш целевой путь C:\Users\Administrator\Desktop это вызывает эту проблему. Можете ли вы попробовать другой целевой путь, например C:\MyBackupsи убедитесь, что у него есть разрешение на запись для учетной записи, от которой выполняется запланированная задача.

Обратите внимание, что вы могли наверное обойти эту проблему другими способами, но это повлечет за собой вмешательство в то, как все должно работать в ОС, поэтому это не рекомендуется.