pgdump 使用 Windows 任務調度程序
我有點迷失了這個。我有幾個數據庫在 Postgres 實例上執行,在裝有 Windows Server 2008 的生產機器上執行,我想安排對數據庫的備份。
我只需要定期轉儲數據庫。因此,我創建了一個小型 .NET 應用程序,它載入了一個配置文件,其中包含定位每個 DB 所需的數據和一個保存轉儲文件的路徑。如果我通過命令行手動執行它,這效果很好並且符合預期。我得到了必要的回饋,並創建了轉儲文件。應用程序動態創建命令參數,並在執行前將數據庫密碼設置在環境變數中:
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 文件。
我清理了線路,並在配置文件中設置了完整路徑,並且工作正常。