使用Windows Taskscheduler的pgdump

我有点失落。 我有一些运行在Windows Server 2008的生产计算机上的Postgres实例上的数据库,并且我想安排备份到数据库。

我所需要的只是数据库的定期转储。 于是我创build了一个小型的.NET应用程序,用一个必要的数据加载一个configuration文件来定位每个数据库和保存转储文件的path。 如果我通过命令行手动执行,这个效果和预期一样。 我得到必要的反馈,并创build转储文件。 应用程序dynamic地创build命令参数,并且在执行之前将数据库密码设置在环境variables中:

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,历史logging选项卡表示它被执行,什么不是,但没有创build文件。 这是我无法弄清楚的。 我安排了任务作为pipe理员(使用我login的帐户),标记与最高privelages相关的checkbox,什么不是,但我仍然没有得到任何输出(即备份文件),即使历史选项卡会说它被执行和完成(最近的尝试,我什至没有得到任何信息在历史选项卡..)。 我已经尝试了两台机器(一个标准和一个与R2)具有相同的结果。

任何build议将是apreciated!

弄清楚了。 但从来没有想到会是这样。

我通过日志,发现一些System.IO.FileNotFoundexception。 原来我的设置文件(而不是.config)没有被引用到正确的代码。 在我的configuration文件中,我有定义的文件名(“settings.xml”),并假定它将在应用程序文件夹(和它)。 我是这样说的:

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

我使用TrimTrailingPathSlash()来清理最后一个斜线,以确保正确。 当直接执行应用程序将工作(和System.Environment.CurrentDirectory会给我正确的path),当在任务sheduler中运行时,由System.Enviroment.CurrentDirectory返回的path肯定不是,我猜测它有taskeng.exe的上下文,因此,在它的文件夹中找不到Settings.xml文件。

我清理了这一行,并在configuration文件中设置了完整的path,并且工作。

这显然是C:\Users\Administrator\Desktop目标path导致此问题。 你可以尝试一个不同的目标path,像C:\MyBackups ,并确保它的权限允许您的计划任务运行的帐户的写入权限。

请注意,您可能以其他方式解决此问题,但是这会涉及干扰操作系统上应该运行的方式,所以不build议这样做。