0

为了使用 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 脚本和 Task Scheduler Job 确实成功了 WIN Vista 商业版。所以我假设在 WIN 7 中我缺少一些东西。

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

谢谢。

4

3 回答 3

2

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

这是我所做的:

cmd /c net use T: '\\server\share' # 为 Cygwin 创建了一个单独的临时共享
DEST="/cygdrive/T/User/FolderBackup/" # 在目的地使用临时共享
rsync -avuz --copy-links "$SRC" "$DEST" # 做备份
cmd /c net use T: /delete # 删除临时共享

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

这对我来说似乎很奇怪。也许我缺少另一种解释。然而,我很欣慰有这个工作!

于 2013-09-22T03:59:55.583 回答
1

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

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

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

于 2013-11-01T16:01:37.970 回答
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"
于 2013-09-14T21:36:54.410 回答