Windows 7任务计划程序BASH脚本失败

时间:2013-09-12 12:38:39

标签: windows bash scheduler

为了使用rsync,我创建了一个BASH脚本。它在WIN 7中从Cygwin shell运行良好,但在从WIN 7任务计划程序运行时失败。我的任务计划程序脚本很简单:

c:\ cygwin \ bin \ bash.exe -l -c“~user / rsync_Windows_Backup 2>& 1>> ~user / Documents_cron.log”

初始目录设置为C:\ Cygwin \ bin。

我的BASH脚本是一个典型的rsync命令,带有[options] SRC DEST和一些相关的内务管理。

“rsync_Windows_Backup”BASH脚本中的rsync命令是:

/bin/time -f "\nElapse (hh:mm:ss.ss) %E" \ 
rsync.exe -v -rltz --chmod=a=rw,Da+x -u "$SRC" "$DEST" >> "$LOG" \ 
2 >> "$LOG"

$ ./rsync_Windows_Backup - succeeds.  

但任务计划程序作业无法解决它无法找到BASH脚本引用的DEST文件夹。当我从BASH命令行执行“cd DEST”时,文件夹是可用的并且可以写入。

我应该添加更多细节,发送者是一个WIN 7桌面,映射到带有驱动器映射J:的Vista桌面接收器。 BASH脚本确实启动但失败了:

rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: mkdir "/cygdrive/J/DocumentsBackup" failed: No such file or directory (2) rsync error:  error in file IO (code 11) 

我已经尝试了几个想法来影响WIN 7如何处理映射和权限,假设这是问题的根源。到目前为止似乎没有任何帮助。

另一个特点是完全相同的BASH脚本和任务计划程序作业确实成功获得了WIN Vista商业版。所以我假设WIN 7中有一些我不知道的东西。

我很难过,可以使用一些指导。

感谢。

3 个答案:

答案 0 :(得分:2)

我现在可以根据需要在任务调度程序中使用Win 7。感谢LinuxQuestionsorg和@konsolebox的@netubsi和@firerat提供了解决方案的建议。

这是我做的:

cmd /c net use T: '\\server\share'        # Created a separate temporary share for Cygwin
DEST="/cygdrive/T/User/FolderBackup/"     # Use temporary Share in Destination
rsync -avuz --copy-links "$SRC" "$DEST"   # Do backup
cmd /c net use T: /delete                 # Remove temporary share 

似乎在WIN 7中,在Windows中创建的共享不可用于Cygwin脚本,如果它是从Win 7任务调度程序中启动的。如果脚本是从Cygwin命令行中提取的,则它可用。在Win Vista中,这似乎也不是问题。

这对我来说似乎很奇怪。也许还有另一种解释,我错过了。但是我很放心让这个工作!!

答案 1 :(得分:1)

您也可以直接在cygwin中使用网络地址:

DEST="//server/share/User/FolderBackup"

Cygwin在/ cygdrive下安装本地和映射的驱动器。如果列出/ cygdrive的内容,在win7中使用taskscheduler,您将看到的只有本地驱动器???

答案 2 :(得分:0)

第一个选项是将脚本作为

运行
c:\cygwin\bin\bash.exe -l -c "~/rsync_Windows_Backup >> ~/Documents_cron.log 2>&1"

如果你想捕获stderr输出,你必须将它放在前面来复制文件的fd,而不是stdout。

确保rsync_Windows_Backup具有可执行权限。正在运行ls -l ~/rsync_Windows_Backup会显示它。

如果不起作用,请尝试使用绝对路径。在您的Cygwin屏幕上,当前目录在提示符~中显示pwd,显示类似

的内容
User@System ~
$ pwd
/home/User

基于此作为示例,您的命令现在应该是:

c:\cygwin\bin\bash.exe -l -c "/home/User/rsync_Windows_Backup >> /home/User/Documents_cron.log 2>&1"