通过批处理文件自动化cygwin

时间:2010-09-28 08:33:49

标签: batch-file cygwin

长话短说......我们有多台服务器,我们每晚运行perflog监控。我的工作是将这些日志转换为.csv格式并将它们发送到我的电子邮箱。

这一点已经通过.sh脚本自动化了,前雇员写道。

我想要自动化的是在perfmon日志记录之后运行批处理作业以查看特定文件夹并找到最新的.blg文件并在其上运行sh脚本(该脚本称为上载),这样我就不会必须登录每个服务器并手动完成。

e.g。

上传myInitials cd /cygdrive/someLocation/logs/$latestFile$.blg

myInitials和位置可以硬编码...我只是不知道如何在文件夹中找到最新文件并通过批处理文件自动完成。

任何指针都会非常有用!

@ Jeremy:

抱歉,我可能应该在我的问题中提到服务器正在运行2003和2008。

我认为没有必要在文件夹上注册更改通知 - 如果日志从中午运行到早上7点,脚本将立即运行(您可以设置脚本在运行后运行) perfmon日志已完成日志属性)所以日志几乎肯定是文件夹中的最新文件。

就像我说的,我已经有一个.sh文件转换为csv并发送到我的电子邮件,我只需要将它合并到一个批处理文件中,这样我就不会去每个服务器和打开cygwin并输入upload xx /cygdrive/location/logs/xyz.blg,我可以让它在日志完成后自动运行,而不必将RDC放入其中。

感谢您的投入!

3 个答案:

答案 0 :(得分:8)

如果您有一个Shell脚本,并且您的工作是从Windows批处理文件调用shell脚本,那么这将起作用。这假设cygwin安装在C:

start_cyg.bat的内容

@echo off
set PATH=%PATH%:"C:\Cygwin\bin"

rem bash --login -i

bash "/cygdrive/d/cyg.sh"

cyg.sh的内容

#!/bin/bash

TAIL=`ls -lrt | tail -1`
echo "TAIL:$TAIL"

如果从windows命令提示符调用start_cyg.bat,则可以在控制台中获取cyg.sh的输出

答案 1 :(得分:2)

要获取目录中的最新文件,ls -1tr | tail -1应该可以正常工作。

答案 2 :(得分:1)

首先,我不知道它是否符合您的要求,但Vista +中的Windows任务计划程序2 非常健壮,并且甚至可以基于日志条目触发事件。但是,提取和解析该日志条目可能需要一些脚本,并且可能会出现并发问题,即使该日志条目确实指示了上次使用的进程。有可能这没有任何帮助,但只是扔掉那里。

以编程方式,这很简单,因为您可以在文件夹上注册更改通知。发生更改时,您将找到最新的文件。然后启动批处理文件以启动shell脚本,或者您可能需要的任何序列。

我认为cygwin甚至可能通过脚本支持更改通知事件,但我不确定。我相信这有Linux扩展,但我可能错了。

如果是我,我只会写一个小C ++应用程序来做任何我想做的事情......但对于你,也许任何(或更可能没有)上述帮助; o。