【发布时间】:2017-06-08 18:21:48
【问题描述】:
我有大量由 Windows 任务计划程序启动的 .bat 文件。并且,随后,或由在此过程中调用的应用程序。在后一种情况下,应用程序会启动一个 .bat 文件来记录它已经启动,并启动另一个 .bat 文件来记录它已经完成。它们全部触发另一个写入日志文件的单个日志记录 .bat 文件。有多种情况导致它们重叠:
所有任务计划程序任务都是手动一次运行
当另一个相关任务时,其中一个应用程序任务仍在运行 调度程序按计划运行。
所以,我们有时会看到:
该进程无法访问该文件,因为它正被另一个进程使用 过程。
而且,这样做的结果是丢失了日志条目。
要明确一点: 任务计划任务:
go1 >>> 启动 bat_name1.bat
go2 >>> 启动 bat_name2.bat
等等
bat_name1.bat, bat_name2.bat,....
CALL log.bat %bat_nameN%
app.exe %bat_nameN%
EXIT
app.exe 任务:名称N
启动 STARTnameN.bat
(运行应用程序的核心)
启动 ENDnameN.bat
STARTnameN.bat 和 ENDnameN.bat
log.bat %nameN%
log.bat
@ECHO OFF
SET fileloc=C:\Users\Public\BackupLogs
echo %time% %date% %2 %3 %~1>%fileloc%\temp.txt
type %fileloc%\temp.txt>>%fileloc%\backuplog.txt
所以目标是让所有这些程序自主运行,但对结果进行排序,以便可以完全写入日志文件而不受干扰。
一种想法是将 temp.txt 分离为 tempN.txt,... 并将结果附加到单个 backuplog.txt 作为结束过程的一部分。这可能会使它变得更好,但似乎不是 100% 的解决方案,因为仍然可能存在重叠?
【问题讨论】:
-
您对单独的 tempN.txt 日志文件的建议是一个很好的建议,但正如您所说,它不能处理重叠的调用。您可以编写锁定代码,以便批处理文件等待运行或在文件存在时退出。在复杂的环境中,这是一个困难且持久的维护问题。您可能需要考虑使用调度程序工具。我在 adTempus arcanadev.com 上取得了一些成功。我只是一个用户,如果您选择 adTempus,我将不会受益。
标签: windows batch-file cmd synchronize