搜索
bottom↓
回复: 47

DOS批处理高手请进,如何实现类似LINUX的lockf功能?【32楼出故障了】

[复制链接]

出16170入6148汤圆

发表于 2020-11-17 19:58:12 | 显示全部楼层 |阅读模式
200汤圆
在 Freebsd(linux)下,我使用过如下的命令:

lockf -t 0 -s /tmp/bkoxxxx_tar_conf.lock /etc/web_tar_confLOG.sh

上面执行命令: /etc/web_tar_confLOG.sh ,然后由lockf生成一个叫 /tmp/bkoxxxx_tar_conf.lock 的文件,当这个 lock文件存在的时候, 再运行 /etc/web_tar_confLOG.sh会被系统拒绝。
但当 /etc/web_tar_confLOG.sh运行出错,或运行完成后, 这个 lock 文件就会消失,这时,系统就允许重新运行  /etc/web_tar_confLOG.sh。




我现在有5T的电影数据,需要从广州家里的windows7 服务器,通过 cwRsync 同步到东莞的 windows 7 服务器。

执行的批处理是:

   
  1. rsync --port 783 --password-file=/cygdrive/d/cwRsync/ppss.rsync  -rvu  /cygdrive/d/backup_01.rar my_rsync_account@n1.armokhome.com::xxxxx
复制代码


但非常扫兴的是, 每同步不到10个电影,连续就会断开,提示以下的出错信息:

rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Connection reset by peer (104)
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(769) [sender=3.0.7]


我认为这个问题应该没有解决方法,  应该我东莞是电信内网,广州是移动内网,都没有外网IP, 是我通过 FRP 实现的穿透访问。估计这两个内网的状态不稳定,导致了  rsync 连接会断开。


我想到一个折中的解决方法: 每5分钟我在 windows 定时器里,启动一下上面的 rsync 命令行,当然要加上类似  lockf 的功能,否则,可能发生几个进程同时拷贝一个电影文件,就乱套了。


如何实现 ?》





出10入284汤圆

发表于 2020-11-17 19:58:13 | 显示全部楼层
  1. @echo off
  2. :loop
  3. tasklist /nh | find /i "rsync.exe" > nul
  4. if ERRORLEVEL 1 (start 你的批处理.bat) else (echo "运行状态良好")

  5. :: 等5min
  6. timeout /t 300 /nobreak

  7. goto loop
复制代码

出10入61汤圆

发表于 2020-11-17 20:54:45 | 显示全部楼层
本帖最后由 tcm123 于 2020-11-17 20:55 编辑

DOS好像没有对应的功能。 要实现这个需求可以试下AlwaysUP 之类的看门狗小工具

出10入284汤圆

发表于 2020-11-17 21:19:02 | 显示全部楼层
首次,有兴趣可以试试我从cygwin提取的rsync:https://www.amobbs.com/thread-5742117-1-1.html,这是真正的rsync
其次,server端确实需要设定*.lock文件,但是我没研究是否有用,至于client端我没用过
最后,可以查找是否有rsync.exez这个线程啊,用命令tasklist就行了,如果没有就重启一下

出10入113汤圆

发表于 2020-11-17 21:26:49 | 显示全部楼层
可否每5个电影做一个拷贝命令,然后这些命令做成批处理文件执行。拷贝文件名用Excel可以生成文本文件,然后做成批处理文件。

出0入34汤圆

发表于 2020-11-17 22:33:40 | 显示全部楼层
估计现在连知道DOS的人都不多了,不要说批处理了

出16170入6148汤圆

 楼主| 发表于 2020-11-17 22:51:21 来自手机 | 显示全部楼层
epwwm 发表于 2020-11-17 22:33
估计现在连知道DOS的人都不多了,不要说批处理了

不能这么说,服务器管理经常需要使用命令行的。

出16170入6148汤圆

 楼主| 发表于 2020-11-17 22:52:20 来自手机 | 显示全部楼层
brother_yan 发表于 2020-11-17 21:44

好!马上测试!

出0入75汤圆

发表于 2020-11-17 22:59:40 | 显示全部楼层
无公网IP同步文件,建议试试Syncthing,Win系统的GUI界面叫SyncTrayzor,可穿透内网双向同步。
Resilio Sync以前也好用,后来用不了了,现在不知道还能不能用。

出10入284汤圆

发表于 2020-11-17 23:08:32 来自手机 | 显示全部楼层
刚发现那个null多写了一个l,应该是nul

出16170入6148汤圆

 楼主| 发表于 2020-11-18 00:21:47 | 显示全部楼层
brother_yan 发表于 2020-11-17 23:08
刚发现那个null多写了一个l,应该是nul

我上面已经修正。

出16170入6148汤圆

 楼主| 发表于 2020-11-18 00:22:55 | 显示全部楼层
Doding 发表于 2020-11-17 22:59
无公网IP同步文件,建议试试Syncthing,Win系统的GUI界面叫SyncTrayzor,可穿透内网双向同步。
Resilio Syn ...

同步数据只是其中的一个使用方法。 我使用FRP 做很多用途的。

这也是是坚持使用WINDOWS7 的原因:我能做想做的任何事情。

出0入75汤圆

发表于 2020-11-18 00:35:28 | 显示全部楼层
armok. 发表于 2020-11-18 00:22
同步数据只是其中的一个使用方法。 我使用FRP 做很多用途的。

这也是是坚持使用WINDOWS7 的原因:我能做 ...

要同步的数据比较大,临时用一下工具,用完删了就行,FRP不稳定时挺让人抓狂的。

出16170入6148汤圆

 楼主| 发表于 2020-11-18 00:48:14 | 显示全部楼层

上面代码测试失败。 就算我已经正在运行 rsync ,它仍是会打一个新窗口运行。

我查到原因了:




留意上面有两个 rsync.exe  其中一个用户是 adv 是我运行的,另个一个是在服务里的:



匪夷所思的是:  我运行的、服务里的,竟然都是 rsync .

我使用: tasklist /nh > 1.txt , 查到有两行:

rsync.exe                     2164 Services                   0      6,852 K
rsync.exe                     3344 RDP-Tcp#0                  2      6,808 K

上面第一行是服务,第二行是我运行的。

于是,我修改了你的代码为(改成1分钟测试一次):

  1. @echo off
  2. :loop
  3. tasklist /nh | find /i "rsync.exe" | find /i "RDP-Tcp#0" > nul
  4. if ERRORLEVEL 1 (start c:\将广州的电影同步到东莞.bat) else (echo "运行状态良好")

  5. :: 等1min
  6. timeout /t 60 /nobreak

  7. goto loop
复制代码



实测运行成功!








200悬赏归你了!


另外,上面我写的方法有点笨:  find /i "rsync.exe" | find /i "RDP-Tcp#0"   , 有更简易的表达方法?  我试了  find /i "rsync.exe RDP-Tcp#0" 不行。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出16170入6148汤圆

 楼主| 发表于 2020-11-18 00:53:15 | 显示全部楼层
饭桶 发表于 2020-11-17 21:26
可否每5个电影做一个拷贝命令,然后这些命令做成批处理文件执行。拷贝文件名用Excel可以生成文本文件,然后 ...

你这个是馊主意啊。

4.7T的数据, 你看一下有多少万个文件,多少个文件夹。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出16170入6148汤圆

 楼主| 发表于 2020-11-18 00:54:55 | 显示全部楼层
epwwm 发表于 2020-11-17 22:33
估计现在连知道DOS的人都不多了,不要说批处理了

看到14楼的解决方案,是否改变了你的见识?

windows服务器的应用,离不开批处理命令行的, 不是动不动就图形界面。

出16170入6148汤圆

 楼主| 发表于 2020-11-18 01:06:08 | 显示全部楼层
另外赠送brother_yan一年的VIP++

出16170入6148汤圆

 楼主| 发表于 2020-11-18 03:09:41 来自手机 | 显示全部楼层
刚才发现出问题了。

出现了5个同步窗口,拷贝同一个文件。

但检查不出原因。

继续观察。

出10入284汤圆

发表于 2020-11-18 08:00:49 来自手机 | 显示全部楼层
armok. 发表于 2020-11-18 03:09
刚才发现出问题了。

出现了5个同步窗口,拷贝同一个文件。

是开启了5个rsync进程么,看看进程都是什么样的

出16170入6148汤圆

 楼主| 发表于 2020-11-18 08:10:56 来自手机 | 显示全部楼层
brother_yan 发表于 2020-11-18 08:00
是开启了5个rsync进程么,看看进程都是什么样的


都是有RDP-Tcp#0"的。

按道理不应该发生,因为只要有一个就会阻止其它继续打开。

我再观察是否重复发生。

目前还没有重演。

出0入169汤圆

发表于 2020-11-18 09:26:02 来自手机 | 显示全部楼层
armok. 发表于 2020-11-18 08:10
都是有RDP-Tcp#0"的。

按道理不应该发生,因为只要有一个就会阻止其它继续打开。

有过类似应用,可靠性很差,经常会打开几个窗口。

出10入284汤圆

发表于 2020-11-18 10:29:56 | 显示全部楼层
armok. 发表于 2020-11-18 00:48
上面代码测试失败。 就算我已经正在运行 rsync ,它仍是会打一个新窗口运行。

我查到原因了:

我的一个rsync客户端批处理,用来备份的,可显示一些信息,你可以参考下。另外不需要开2个rsync啊,把src和dst互换就可以从push变成pull了。我的机器要么部署rsync server,要么作为client,通过互换src和dst完成传输方向的改变


参考代码:
  1. @cd rsync-client

  2. :: 启动stunnel
  3. @stunnel-rsync stunnel_client.conf

  4. :: 注意src和dst的尾斜杠
  5. @set pwd=../rsync-client.password
  6. @set dst=rsync://xxx@localhost:873/xxx

  7. @set src=电影
  8. @rsync -avzXU --open-noatime --delete --delete-after ../%src% %dst% --password-file=%pwd% --out-format="%%o  %%12b bytes | %%12l bytes  %%n%%L" --progress

  9. @set src=音乐
  10. @rsync -avzXU --open-noatime --delete --delete-after ../%src% %dst% --password-file=%pwd% --out-format="%%o  %%12b bytes | %%12l bytes  %%n%%L" --progress

  11. :: 关闭stunnel
  12. @taskkill /F /IM stunnel-rsync.exe 1>nul

  13. @pause
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出16170入6148汤圆

 楼主| 发表于 2020-11-18 14:17:04 来自手机 | 显示全部楼层
brother_yan 发表于 2020-11-18 10:29
我的一个rsync客户端批处理,用来备份的,可显示一些信息,你可以参考下。另外不需要开2个rsync啊,把src ...


我的server 和client是同时使用的。

你显示的信息很实用,我参考一下,谢谢!

另外,上面我写的方法有点笨:  find /i "rsync.exe" | find /i "RDP-Tcp#0"   , 有更简易的表达方法?  我试了  find /i "rsync.exe RDP-Tcp#0" 不行。

出16170入6148汤圆

 楼主| 发表于 2020-11-18 14:33:24 | 显示全部楼层
出云7个小时。回来查看,发现有3次中断,现在运行第4次。

证明这个方法可行!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入284汤圆

发表于 2020-11-18 14:47:14 | 显示全部楼层
armok. 发表于 2020-11-18 14:17
我的server 和client是同时使用的。

你显示的信息很实用,我参考一下,谢谢!

我觉得可以了,并没有很复杂,逻辑也清晰。不过既然你有这个追求,那可以用findstr命令试一试:
  1. tasklist /nh | findstr "rsync.*RDP" >nul
复制代码

出280入168汤圆

发表于 2020-11-18 14:57:00 | 显示全部楼层
DOS 的批处理似乎有点不稳定,我也遇到过进程失控的情况。

原设计目标本来应该一个进程在工作,其他进程自动退出的,

但有时候检查机制不起作用,就出现了几个进程都冒出来的情况。

但又不是每次都会这样,所以有点抓狂,后来就放弃这种方式了。

出16170入6148汤圆

 楼主| 发表于 2020-11-18 17:04:09 | 显示全部楼层
我增加了传输的进度显示,直观多了:



增加下面的参数就行:

  1. --progress
复制代码



第一个数字很难看懂。 能否改成以T为单位,小数点后面有几位数字,比如5位。并且前面再增加显示文件总大小。

这样,我一下就能看到这电影拷到比如0.12457 T 的位置。  当然,如果麻烦就不用做了。


sending incremental file list
IMDB TOP 250最佳电影/IMDbTOP250.NO.047.钢琴家 .mp4
    36503552   1%    2.45MB/s    0:19:16


改为:

sending incremental file list
IMDB TOP 250最佳电影/IMDbTOP250.NO.047.钢琴家 .mp4
    5.68921T   0.12457T   1%    2.45MB/s    0:19:16

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出16170入6148汤圆

 楼主| 发表于 2020-11-18 17:26:46 来自手机 | 显示全部楼层
目前工作稳定。上面只出现过一次5个同步窗口,可能是我键盘压住了回车,导致连续打开5个直接同步的批处理(这批处理没有控制的)。

继续观察。

出16170入6148汤圆

 楼主| 发表于 2020-11-18 17:53:27 | 显示全部楼层
现在我才同步了0.24T数据, 4.7T 岂不要同步20天?

反正我不急,让当作测试机器吧。


这种远程同步真的生不如死啊。。。。刚才只同步了一个电影,第二个到16%的时候网络就出错,幸亏系统会在60秒内自动重启同步进程。

如果没有这个批处理, 完全不可想象啊。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入284汤圆

发表于 2020-11-18 20:26:40 来自手机 | 显示全部楼层
armok. 发表于 2020-11-18 17:04
我增加了传输的进度显示,直观多了:



这个我就办不到了,我对rsync没有那么熟悉,看哪位大神能搞定?

出16170入6148汤圆

 楼主| 发表于 2020-11-18 20:35:54 来自手机 | 显示全部楼层
brother_yan 发表于 2020-11-18 20:26
这个我就办不到了,我对rsync没有那么熟悉,看哪位大神能搞定?

那就跳过。

出16170入6148汤圆

 楼主| 发表于 2020-11-19 07:27:43 | 显示全部楼层
昨天真的出问题了。 早上起来检查,发现服务器上打开了无数个DOS窗口,不少于100个。 大约有60个是传输失败的,还有下面这么多正在运行的,都在拷贝同一个文件:

rsync.exe                     2164 Services                   0      6,852 K
rsync.exe                    16120 RDP-Tcp#0                  2      7,536 K
rsync.exe                    16308 RDP-Tcp#0                  2      7,528 K
rsync.exe                    13264 RDP-Tcp#0                  2      7,496 K
rsync.exe                    11716 RDP-Tcp#0                  2      7,532 K
rsync.exe                     3764 RDP-Tcp#0                  2      7,516 K
rsync.exe                     7144 RDP-Tcp#0                  2      7,508 K
rsync.exe                     8840 RDP-Tcp#0                  2      7,528 K
rsync.exe                     8140 RDP-Tcp#0                  2      7,496 K
rsync.exe                     8244 RDP-Tcp#0                  2      7,532 K
rsync.exe                     6544 RDP-Tcp#0                  2      7,504 K
rsync.exe                     8188 RDP-Tcp#0                  2      7,500 K
rsync.exe                     4344 RDP-Tcp#0                  2      7,500 K
rsync.exe                    12660 RDP-Tcp#0                  2      7,504 K
rsync.exe                    11172 RDP-Tcp#0                  2      7,532 K
rsync.exe                    11732 RDP-Tcp#0                  2      7,492 K
rsync.exe                    10044 RDP-Tcp#0                  2      7,536 K
rsync.exe                    10572 RDP-Tcp#0                  2      7,532 K
rsync.exe                     5836 RDP-Tcp#0                  2      7,472 K
rsync.exe                     3636 RDP-Tcp#0                  2      7,476 K
rsync.exe                    14104 RDP-Tcp#0                  2      7,472 K
rsync.exe                     8540 RDP-Tcp#0                  2      7,476 K
rsync.exe                    13076 RDP-Tcp#0                  2      7,476 K
rsync.exe                     6788 RDP-Tcp#0                  2      7,472 K
rsync.exe                    14012 RDP-Tcp#0                  2      7,476 K
rsync.exe                     5116 RDP-Tcp#0                  2      7,480 K
rsync.exe                    15388 RDP-Tcp#0                  2      7,472 K
rsync.exe                    15160 RDP-Tcp#0                  2      7,476 K
rsync.exe                    15960 RDP-Tcp#0                  2      7,472 K
rsync.exe                    16268 RDP-Tcp#0                  2      7,468 K
rsync.exe                     4576 RDP-Tcp#0                  2      7,472 K
rsync.exe                     9752 RDP-Tcp#0                  2      7,468 K
rsync.exe                    15784 RDP-Tcp#0                  2      7,468 K
rsync.exe                     8532 RDP-Tcp#0                  2      7,476 K
rsync.exe                    10116 RDP-Tcp#0                  2      7,480 K
rsync.exe                     7496 RDP-Tcp#0                  2      7,468 K
rsync.exe                     2976 RDP-Tcp#0                  2      7,476 K
rsync.exe                     7280 RDP-Tcp#0                  2      7,476 K
rsync.exe                    10912 RDP-Tcp#0                  2      7,468 K
rsync.exe                    14400 RDP-Tcp#0                  2      7,472 K
rsync.exe                    15528 RDP-Tcp#0                  2      7,472 K
rsync.exe                    10488 RDP-Tcp#0                  2      7,472 K
rsync.exe                     6596 RDP-Tcp#0                  2      7,476 K
rsync.exe                    10084 RDP-Tcp#0                  2      7,480 K
rsync.exe                    13056 RDP-Tcp#0                  2      7,468 K
rsync.exe                     8448 RDP-Tcp#0                  2      7,468 K
rsync.exe                    12836 RDP-Tcp#0                  2      7,480 K
rsync.exe                    10032 RDP-Tcp#0                  2      7,464 K
rsync.exe                    11680 RDP-Tcp#0                  2      7,476 K
rsync.exe                     5620 RDP-Tcp#0                  2      7,476 K
rsync.exe                     8324 RDP-Tcp#0                  2      7,476 K
rsync.exe                    15396 RDP-Tcp#0                  2      7,476 K
rsync.exe                    15872 RDP-Tcp#0                  2      7,468 K
rsync.exe                    16256 RDP-Tcp#0                  2      7,472 K
rsync.exe                    11612 RDP-Tcp#0                  2      7,476 K
rsync.exe                     5972 RDP-Tcp#0                  2      7,472 K
rsync.exe                    16020 RDP-Tcp#0                  2      7,472 K
rsync.exe                     8144 RDP-Tcp#0                  2      7,472 K
rsync.exe                    13396 RDP-Tcp#0                  2      7,476 K
rsync.exe                    15672 RDP-Tcp#0                  2      7,472 K
rsync.exe                    11160 RDP-Tcp#0                  2      7,472 K
rsync.exe                    13224 RDP-Tcp#0                  2      7,472 K
rsync.exe                     4292 RDP-Tcp#0                  2      7,472 K
rsync.exe                    12000 RDP-Tcp#0                  2      7,468 K
rsync.exe                    10620 RDP-Tcp#0                  2      7,472 K
rsync.exe                    12988 RDP-Tcp#0                  2      7,476 K
rsync.exe                    10932 RDP-Tcp#0                  2      7,472 K
rsync.exe                     8380 RDP-Tcp#0                  2      7,468 K
rsync.exe                     7388 RDP-Tcp#0                  2      7,476 K
rsync.exe                    13068 RDP-Tcp#0                  2      7,476 K
rsync.exe                    13952 RDP-Tcp#0                  2      7,480 K
rsync.exe                    14072 RDP-Tcp#0                  2      7,476 K
rsync.exe                     6188 RDP-Tcp#0                  2      7,476 K
rsync.exe                     3716 RDP-Tcp#0                  2      7,472 K
rsync.exe                     6620 RDP-Tcp#0                  2      7,476 K
rsync.exe                     4064 RDP-Tcp#0                  2      7,480 K
rsync.exe                    15616 RDP-Tcp#0                  2      7,472 K
rsync.exe                     5480 RDP-Tcp#0                  2      7,472 K
rsync.exe                    16372 RDP-Tcp#0                  2      7,468 K
rsync.exe                    10144 RDP-Tcp#0                  2      7,476 K
rsync.exe                    12540 RDP-Tcp#0                  2      7,472 K
rsync.exe                     6312 RDP-Tcp#0                  2      7,472 K
rsync.exe                    10776 RDP-Tcp#0                  2      7,468 K
rsync.exe                     3192 RDP-Tcp#0                  2      7,468 K
rsync.exe                     6224 RDP-Tcp#0                  2      7,472 K
rsync.exe                     5832 RDP-Tcp#0                  2      7,472 K
rsync.exe                     2748 RDP-Tcp#0                  2      7,472 K
rsync.exe                    13744 RDP-Tcp#0                  2      7,476 K
rsync.exe                     5356 RDP-Tcp#0                  2      7,480 K
rsync.exe                    13676 RDP-Tcp#0                  2      7,472 K
rsync.exe                    12072 RDP-Tcp#0                  2      7,472 K
rsync.exe                    12216 RDP-Tcp#0                  2      7,472 K
rsync.exe                    15756 RDP-Tcp#0                  2      7,468 K
rsync.exe                    10836 RDP-Tcp#0                  2      7,476 K
rsync.exe                     7692 RDP-Tcp#0                  2      7,472 K
rsync.exe                    14644 RDP-Tcp#0                  2      7,476 K
rsync.exe                    12664 RDP-Tcp#0                  2      7,480 K
rsync.exe                     9716 RDP-Tcp#0                  2      7,472 K
rsync.exe                    11848 RDP-Tcp#0                  2      7,476 K
rsync.exe                    14496 RDP-Tcp#0                  2      7,476 K
rsync.exe                    15124 RDP-Tcp#0                  2      7,464 K
rsync.exe                    10632 RDP-Tcp#0                  2      7,480 K
rsync.exe                    12412 RDP-Tcp#0                  2      7,476 K
rsync.exe                     8952 RDP-Tcp#0                  2      7,460 K
rsync.exe                    15332 RDP-Tcp#0                  2      7,476 K
rsync.exe                     3816 RDP-Tcp#0                  2      7,472 K
rsync.exe                     9228 RDP-Tcp#0                  2      7,480 K
rsync.exe                     5932 RDP-Tcp#0                  2      7,468 K
rsync.exe                    12644 RDP-Tcp#0                  2      7,472 K
rsync.exe                     5388 RDP-Tcp#0                  2      7,480 K
rsync.exe                    16204 RDP-Tcp#0                  2      7,472 K
rsync.exe                     8800 RDP-Tcp#0                  2      7,476 K
rsync.exe                     3220 RDP-Tcp#0                  2      7,476 K
rsync.exe                     5740 RDP-Tcp#0                  2      7,476 K
rsync.exe                     7656 RDP-Tcp#0                  2      7,476 K
rsync.exe                     3388 RDP-Tcp#0                  2      7,472 K
rsync.exe                     6972 RDP-Tcp#0                  2      7,476 K
rsync.exe                     5964 RDP-Tcp#0                  2      7,480 K
rsync.exe                    14028 RDP-Tcp#0                  2      7,476 K
rsync.exe                    11540 RDP-Tcp#0                  2      7,476 K
rsync.exe                     5488 RDP-Tcp#0                  2      7,476 K
rsync.exe                    10852 RDP-Tcp#0                  2      7,484 K
rsync.exe                    15964 RDP-Tcp#0                  2      7,480 K
rsync.exe                     9784 RDP-Tcp#0                  2      7,476 K
rsync.exe                    11488 RDP-Tcp#0                  2      7,472 K
rsync.exe                    12396 RDP-Tcp#0                  2      7,472 K
rsync.exe                     3724 RDP-Tcp#0                  2      7,472 K
rsync.exe                     2828 RDP-Tcp#0                  2      7,476 K
rsync.exe                    12148 RDP-Tcp#0                  2      7,476 K
rsync.exe                    15220 RDP-Tcp#0                  2      7,468 K
rsync.exe                    10936 RDP-Tcp#0                  2      7,468 K
rsync.exe                     9424 RDP-Tcp#0                  2      7,468 K
rsync.exe                    13360 RDP-Tcp#0                  2      7,472 K
rsync.exe                    13284 RDP-Tcp#0                  2      7,472 K
rsync.exe                    11572 RDP-Tcp#0                  2      7,472 K
rsync.exe                     4684 RDP-Tcp#0                  2      7,472 K
rsync.exe                     6748 RDP-Tcp#0                  2      7,472 K
rsync.exe                     5776 RDP-Tcp#0                  2      7,476 K
rsync.exe                    12816 RDP-Tcp#0                  2      7,468 K
rsync.exe                     5592 RDP-Tcp#0                  2      7,468 K
rsync.exe                     9168 RDP-Tcp#0                  2      7,476 K
rsync.exe                     3476 RDP-Tcp#0                  2      7,512 K


服务器竟然没有死机,并且速度竟然不受影响  :)


这次肯定已经排队了键盘误触发了。因为我都睡觉了。

出16170入6148汤圆

 楼主| 发表于 2020-11-19 07:31:47 | 显示全部楼层
brother_yan 发表于 2020-11-18 14:47
我觉得可以了,并没有很复杂,逻辑也清晰。不过既然你有这个追求,那可以用findstr命令试一试:
...

测试了"rsync.*RDP" 不行。

出10入284汤圆

发表于 2020-11-19 07:38:24 来自手机 | 显示全部楼层
armok. 发表于 2020-11-19 07:31
测试了"rsync.*RDP" 不行。

我用win10 LTSC测试可以,是不是win7没有findstr命令

出10入284汤圆

发表于 2020-11-19 07:41:56 来自手机 | 显示全部楼层
armok. 发表于 2020-11-19 07:27
昨天真的出问题了。 早上起来检查,发现服务器上打开了无数个DOS窗口,不少于100个。 大约有60个是传输失败 ...

可能哪里有bug,尴尬了

出16170入6148汤圆

 楼主| 发表于 2020-11-19 07:45:12 | 显示全部楼层
brother_yan 发表于 2020-11-19 07:38
我用win10 LTSC测试可以,是不是win7没有findstr命令


可以了。 我改错了, 我只修改了后面,没有留意前面已经不是 find /i  而是 findstr 了。

好。就使用这个再测试一下。


能否改成检测到N次,才启动rsync批处理?  我一分钟检测一次, 连续检测5次,都是没有运行,才启动 rsync 窗口。

相当于是软件防抖了 :)


windows 真的不可靠啊。。。怪不得专业服务器领域,基本没有 windows 的事情。

出10入284汤圆

发表于 2020-11-19 07:50:27 来自手机 | 显示全部楼层
rsync出错就会退出,如果无限循环启动rsync,正常运行会阻塞,出错了退出就再重启一次,应该可以。只是写bat我得想想,如果用c写个exe就简单太多了,比如 while(1) system("xxx.bat");

出16170入6148汤圆

 楼主| 发表于 2020-11-19 07:52:49 | 显示全部楼层
brother_yan 发表于 2020-11-19 07:50
rsync出错就会退出,如果无限循环启动rsync,正常运行会阻塞,出错了退出就再重启一次,应该可以。只是写ba ...

现在出错了也是会退出的。留下一个空的DOS窗口无所谓,正好给我查看之有出错了多少次。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出16170入6148汤圆

 楼主| 发表于 2020-11-19 10:47:18 | 显示全部楼层
刚才出去一趟,不到1小时回来,发现又出错了:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入284汤圆

发表于 2020-11-19 10:55:21 | 显示全部楼层
我猜几个可能的问题:
1. 因为用了管道|,有可能错误代码是中间某个命令的,而不是预期的那样
2. tasklist里的会话名用RDP可能有问题,因为同一个进程,用远程桌面运行tasklist和你真实在那台电脑上运行tasklist是不一样的

出10入284汤圆

发表于 2020-11-19 13:08:22 | 显示全部楼层
本帖最后由 brother_yan 于 2020-11-19 13:31 编辑
armok. 发表于 2020-11-19 10:47
刚才出去一趟,不到1小时回来,发现又出错了:


我改了一下逻辑:统计非系统服务的rsync进程个数

  1. @echo off

  2. :loop


  3. :: 求没有作为系统服务的rsync个数(获取所有进程->排除掉系统服务->查找所有rsync进程->统计rsync进程数)的命令:
  4. :: tasklist /nh | findstr /i /v "Services" | findstr /i "^rsync" | find /c "rsync"
  5. :: 用在for中,管道|需要转义成^|
  6. for /f %%i in ('tasklist /nh ^| findstr /i /v "Services" ^| findstr /i "^rsync" ^| find /c "rsync"') do @set rsync_process_count=%%i


  7. if %rsync_process_count% equ 0 (start xxx.bat) else (echo 非Services的rsync进程数:%rsync_process_count%)


  8. :: 等1min
  9. timeout /t 60 /nobreak


  10. goto loop
复制代码


另外,通过tasklist /v可以看到更详细的信息。我想用status,但是我的rsync server是unknown而不是running状态,所以没法用

出16170入6148汤圆

 楼主| 发表于 2020-11-19 13:48:07 来自手机 | 显示全部楼层
brother_yan 发表于 2020-11-19 13:08
我改了一下逻辑:统计非系统服务的rsync进程个数




哈哈,刚才我应该已经解决了。

我终于弄个明白,为何我盯着屏幕,它不会出错。我一走开就出错。

原来是我走开,就会关闭服务器的远程桌面。这时候,就会出错。

我已经反复验证了这个问题了。

解决方法,是不使用dos窗口的定时器,改为使用Windows 的任务计划,每1分钟运行一次下面内容的批处理:


  1. @echo off

  2. tasklist /v | findstr "rsync.*administrator" >nul

  3. if ERRORLEVEL 1 (start rsync --port 873 --password-file=/cygdrive/c/cwRsync/ppss.rsync  --progress -rvu  /cygdrive/d/movies/ myaccount@ttt.xxxxx.com::movies) else (echo "运行状态良好")

复制代码



实测已经通过。



上面不再检查RDP, 因为我发现,使用定时任务后, 不再是RDP, 变成都是 Service,  于是,我改为检测运行的用户名: administrator.(rsync的服务用户名是cwRsybc).





搞完上面,我意识到,之前的方法在关闭远程窗口后出错的原因, 应该是不再是检测RDP, 如果改为检测用户名应该也能成功。

不过没有必要的,使用任务计划才是正道。



出10入284汤圆

发表于 2020-11-19 14:25:48 | 显示全部楼层
armok. 发表于 2020-11-19 13:48
哈哈,刚才我应该已经解决了。

我终于弄个明白,为何我盯着屏幕,它不会出错。我一走开就出错。

看来确实是查找"RDP"的原因

出16170入6148汤圆

 楼主| 发表于 2020-11-19 16:00:49 | 显示全部楼层
现在备份终于步入正轨了。刀枪不入的感觉了。

现在是16:00,  备份到315G了。

备份速度大概2MB/S,  还有4.4T, 计算一下:

4,400,000÷2÷60÷60÷24=25天。


我的天啊!!  


还以为4.7T的容量不大,还以为2mb/s的备份速度不慢了(100兆的电信带宽其实只有2mb的上传带宽),竟然要25天。

出16170入6148汤圆

 楼主| 发表于 2020-11-19 22:14:10 | 显示全部楼层
armok. 发表于 2020-11-19 16:00
现在备份终于步入正轨了。刀枪不入的感觉了。

现在是16:00,  备份到315G了。

22:00 备份到343G,

6个小时,才28G,平均才1.3M/S ?

出16170入6148汤圆

 楼主| 发表于 2020-11-19 22:36:49 | 显示全部楼层
之前的批处理, 我刚才测试,修改成下面这样,即使关闭了远程桌面,也不会再出问题了。

  1. @echo off

  2. :loop

  3. tasklist /v | findstr "rsync.*administrator" >nul
  4. rem 或者: tasklist /nh | find /i "rsync.exe" | find /i "administrator" > nul

  5. if ERRORLEVEL 1 (start c:\gzhome\将广州的电影同步到东莞.bat) else (echo "运行状态良好")

  6. :: 等1min
  7. timeout /t 60 /nobreak

  8. goto loop
复制代码

出10入284汤圆

发表于 2020-11-19 22:52:08 | 显示全部楼层
armok. 发表于 2020-11-19 13:48
哈哈,刚才我应该已经解决了。

我终于弄个明白,为何我盯着屏幕,它不会出错。我一走开就出错。

这是bug?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出16170入6148汤圆

 楼主| 发表于 2020-11-20 00:05:15 | 显示全部楼层

的确是bug。

电脑版不会出现。这是手机版特有的bug。

我已经通知技术人员修正。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 14:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表