2014-03-27 43 views
0

我有一个批处理文件调用另一个启动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文件。

不知道为什么。

+0

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

+0

生病试试,谢谢 – tik27

回答

1

当您启动批处理文件时,stdout流将被重定向。从这个过程中开始的程序在它们仍在运行时“继承”这种情况,它们保持对文件的锁定。

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

+0

有没有办法记录我的批处理文件正在做什么,而没有底层进程锁定日志文件? – tik27

+0

@ tik27。必要时写入日志,而不是重定向所有批处理文件。至少有必要在开始后台进程时没有重定向。 –