【问题标题】:batch started process locking log file批处理启动进程锁定日志文件
【发布时间】:2014-03-27 23:41:24
【问题描述】:

我有一个批处理文件,它调用另一个启动 Java 服务器的批处理文件。 问题是java进程以某种方式将我重定向到的文件锁定在主批处理文件上。

@echo off

code......

echo shut down server
call %serverBin%\server stop worklightServer
rem net stop WLPServer

more code.....

echo start server
call %serverBin%\server start worklightServer
rem net start WLPServer

我用
E:\IBM\wlp\bin\worklightRestart.bat >> E:\IBM\wlp\bin\restartWorklight.log开始这个批处理文件

问题是这个脚本只能运行一次,然后每隔一段时间就会失败。
看来server.bat启动的java进程正在锁定restartWorklight.log文件。

不知道为什么。

【问题讨论】:

  • 也许停止/开始调用call %serverBin%\server stop worklightServer 正在打开调用它们的worklightRestart.bat 的执行?执行是否返回到此调用批处理文件?你真的只需要从一个批处理文件跳到另一个,放弃第一个 - 即删除 call

标签: windows batch-file cmd


【解决方案1】:

当您启动批处理文件时,stdout 流被重定向。从该进程内部启动的程序“继承”了这种情况,因此当它们仍在运行时,它们会锁定文件。

问题是由于您启动批处理文件的方式需要锁定日志文件,因此您无法启动停止服务器的进程。如果将重定向到日志文件的位置放在启动后台进程的行中,停止服务器将释放锁定。

【讨论】:

  • 有没有办法在没有底层进程锁定日志文件的情况下记录我的批处理文件正在做什么?
  • @tik27。必要时写入日志,而不是重定向所有批处理文件。至少在启动后台进程时没有重定向是必要的。
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
相关资源
最近更新 更多