![Windows 7 任务计划程序中的 Bash 脚本失败](https://linux22.com/image/1378444/Windows%207%20%E4%BB%BB%E5%8A%A1%E8%AE%A1%E5%88%92%E7%A8%8B%E5%BA%8F%E4%B8%AD%E7%9A%84%20Bash%20%E8%84%9A%E6%9C%AC%E5%A4%B1%E8%B4%A5.png)
为了使用,rsync
我创建了一个 Bash 脚本。它在 Win 7 中的 Cygwin 32 位 shell 中运行良好,但在 Win 7 任务计划程序中运行时失败。我的任务计划程序脚本很简单:
c:\cygwin\bin\bash.exe -l -c "/home/user/rsync_Windows_Backup >> /home/user/Documents_cron.log 2>&1"
该作业的初始目录设置为C:\Cygwin\bin
。
我的 Bash 脚本很典型rsync [options] SRC DEST
,并且有一些相关的管理功能。
rsync
我的 Bash 脚本中的命令是rsync_Windows_Backup
:
/bin/time -f "\nElapse (hh:mm:ss.ss) %E" \
rsync.exe -ravuz --copy-links "$SRC" "$DEST" >> "$LOG" \
2 >> "$LOG"
我从 Cygwin 命令行测试了该脚本。它按预期运行,即
$ ./rsync_Windows_Backup - succeeds.
但是,任务计划程序作业失败,因为它找不到 Bash 脚本引用的 DEST 文件夹。当我cd DEST
从 BASH 命令行执行时,该文件夹可用,也可以写入。
我应该补充一些细节,发送方是一个 Win 7 桌面,它通过驱动器映射映射到 Vista 桌面接收方J:
。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)
我可以通过在任务计划程序属性的常规选项卡中将配置更改为 Windows 7 来消除第一个错误。我不明白为什么mkdir
无法看到共享J:
。
为了检查 LAN 连接,我还做了net use J: \\server\share
。它连接良好,并允许列出和写入等。
当我在 Windows Vista 中运行相同的任务计划程序时做工作正常。
这是 Windows 7 上的一些更精细的 NTLM 问题还是其他权限问题?我现在很困惑。
答案1
现在,我已在 Win 7 中通过任务计划程序实现了此功能,正如我所料。感谢 @netubsi 和 @firerat 提出的解决方案建议。
这是我所做的:
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 中,如果从 Win 7 任务计划程序启动 Cygwin 脚本,则 Windows 中创建的共享不可用。如果从 Cygwin 命令行启动脚本,则可以使用。看来在 Win Vista 中这也不是问题。
我觉得这很奇怪。也许还有其他我没理解的解释。不过我很高兴这个能用!!