0

rsync を使用するために、BASH スクリプトを作成しました。WIN 7 の Cygwin シェルからは正常に実行されますが、WIN 7 タスク スケジューラから実行すると失敗します。私のタスク スケジューラ スクリプトは単純です。

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

初期ディレクトリは C:\Cygwin\bin に設定されています。

私の BASH スクリプトは、[オプション] SRC DEST といくつかの関連するハウスキーピングを備えた典型的な rsync コマンドです。

「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」を実行すると、フォルダーが利用可能になり、書き込み可能になります。

送信者がドライブ マッピング J: を使用して Vista デスクトップ受信者にマップされている WIN 7 デスクトップであることをさらに詳細に追加する必要があります。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 がマッピングとアクセス許可を処理する方法に影響を与えるいくつかのアイデアを試しました。これまでのところ、何も役に立たないようです。

もう 1 つの特徴は、まったく同じ BASH スクリプトとタスク スケジューラ ジョブが Windows Vista Business Edition で成功することです。したがって、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 で作成された共有は、Win 7 タスク スケジューラから起動された場合、Cygwin スクリプトで使用できないようです。スクリプトが Cygwin コマンドラインから起動された場合に利用可能です。また、これは Win Vista の問題ではないようです。

これは私には奇妙に思えます。おそらく、私が見逃している別の説明があります。しかし、私はこれが機能していて安心しています!!

于 2013-09-22T03:59:55.583 に答える
1

cygwin でネットワーク アドレスを直接使用することもできます。

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

Cygwin は、ローカルおよびマップされたドライブを /cygdrive の下にマウントします。/cygdriveの内容を一覧表示すると、win7でタスクスケジューラを使用すると、ローカルドライブしか表示されません???

于 2013-11-01T16:01:37.970 に答える