为了使用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中有一些我不知道的东西。
我很难过,可以使用一些指导。
感谢。
答案 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"