rsmedude Posted June 18, 2015 Share Posted June 18, 2015 Hello everyone,I have been a member for a while but relatively new to posting to the message boards. I am also still relatively new to using AutoIt. I am working on a script that will help keep a program running on one of my file servers.Here is what I have accomplished so far looking at different threads on the site already.1. A check performed every 60 seconds to see if the application is running. (ultimately to be changed to something like once an hour)2. Write a log file that shows either the check was performed with no issue or the application had to be restarted.Both of those are working fine and I have to say that ever since I started using this script the program has not crashed!My next phase is to figure out how to make the script check and trim the log file. I am obviously not trying to make a log file that becomes bloated and chews up a large amount of hard drive space. The main purpose of the log file is so that I know if the application has been restarted. I am thinking have the script trim the file every 30 day maybe. Another words delete everything in the log file 30 days prior to the current day. So if someone can help me out here as I am not a scripting genius. Unfortunately I only know enough to be dangerous if you will.I also have another part of this script I want to write but first I want to get the log file working just the way I want. I am attaching a sample of what I have working so far.Thank you for any and all help folks.Respectfully,James #include <File.au3> While 1 ;Start Loop If ProcessExists("atcsmon.exe") Then ;~ Open the logfile in write mode. Local $hFile = FileOpen(@ScriptDir & "\ATCS_AutoIt.log", 1) _FileWriteLog($hFile, "ATCS check was completed and found running by the AutoIt3 Script") ; Write to the logfile passing the filehandle returned by FileOpen. FileClose($hFile) ; Close the filehandle to release the file. Else ;If Process does not exist Run("C:\atcs_monitor\atcsmon.exe", "", @SW_SHOWMINIMIZED) ;~ Open the logfile in write mode. Local $hFile = FileOpen(@ScriptDir & "\ATCS_AutoIt.log", 1) _FileWriteLog($hFile, "*ALERT* *ALERT* *ALERT* ATCS was restarted by the AutoIt3 Script") ; Write to the logfile passing the filehandle returned by FileOpen. FileClose($hFile) ; Close the filehandle to release the file. EndIf Sleep(60000) ;sleep 60 seconds WEnd ;Close Loop [font="Arial"]James D. Williams[/font] Link to comment Share on other sites More sharing options...
Shane0000 Posted June 18, 2015 Share Posted June 18, 2015 (edited) Perhaps you could use an INI and use a time stamp as the key.You could use something like (untested):#include <Date.au3> #include <Array.au3> $sTimeStamp = _NowCalc() $sEvent = "Alert or Pass text" IniWrite(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $sTimeStamp, $sEvent) ;to delete old entries $aIniData = IniReadSecion(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log") For $i = 0 to Ubound($aIniData) - 1 If _DateDiff("D", $aIniData[$i][0], _NowCalc()) > 30 Then _ArrayDelete($aIniData, $i) $i -= 1 ;item $i + 1 just became item $i so go back and check the new values in array slot $i Else ExitLoop ; if the entry is newer than 30 days , stop searching EndIf Next IniWriteSection( @ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $aIniData , 1) Edited June 18, 2015 by Shane0000 Added #includes Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted June 18, 2015 Moderators Share Posted June 18, 2015 If this is a true monitoring script, why not write to the Event Viewer. You could even set up an email alert to yourself if the event matches certain criteria. "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
rsmedude Posted June 18, 2015 Author Share Posted June 18, 2015 Shane0000 - I will look at this and give it a try I suppose I will have to "falsify" some log entries to make sure I am implementing this correctly!JLogan3o13 - I never thought about going that rout. Well let me rephrase that. I thought about the email alert (more like a text message) if the application goes down. However I never thought about putting it into the system log. Do you have an example of how that would be done in the scripting?Sorry I am learning as I go with this entire project.Thank you for the help!Respectfully,James [font="Arial"]James D. Williams[/font] Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted June 18, 2015 Moderators Share Posted June 18, 2015 (edited) There are a number of different ways to do it, but In it's simplest form, you can write the event with a ShellExecute: ShellExecute("EventCreate.exe", '/L Application /T Information /SO "MyApp" /ID 666 /D "My event Message"', "", "", @SW_HIDE) Edited June 18, 2015 by JLogan3o13 "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
BrewManNH Posted June 18, 2015 Share Posted June 18, 2015 You can also use the _EventLog_* functions, specifically _EventLog_Open and _EventLog_Report. JLogan3o13 1 If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted June 18, 2015 Moderators Share Posted June 18, 2015 +1, totally forgot about the built-in functions "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
rsmedude Posted June 19, 2015 Author Share Posted June 19, 2015 Perhaps you could use an INI and use a time stamp as the key.You could use something like (untested):#include <Date.au3> #include <Array.au3> $sTimeStamp = _NowCalc() $sEvent = "Alert or Pass text" IniWrite(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $sTimeStamp, $sEvent) ;to delete old entries $aIniData = IniReadSecion(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log") For $i = 0 to Ubound($aIniData) - 1 If _DateDiff("D", $aIniData[$i][0], _NowCalc()) > 30 Then _ArrayDelete($aIniData, $i) $i -= 1 ;item $i + 1 just became item $i so go back and check the new values in array slot $i Else ExitLoop ; if the entry is newer than 30 days , stop searching EndIf Next IniWriteSection( @ScriptDir & "\ATCS_AutoIt.log", "Event_Log", $aIniData , 1) Ok I tried this. and I got the following error.Line 106 (File "C:\Users\GMS\Desktop\ATCS_UP_CHECK_REV4-temp_test.au3"):$aIniData = IniReadSecion(@ScriptDir & "\ATCS_AutoIt.log", "Event_Log")$aIniData = ^ ERROR Error: Unknown function name.I am not sure what the deal is with this. I suspect it has something to do with the part of the argument that has "Event_Log" in it. I did try messing with it but I didn't have any success. Shane0000, if I could get a little help debugging this I would appreciate it. JLogan3o13, I have not totally thrown your suggestion out the window. I am interested in using that but mainly for the error (if the program has to be restarted) but I think I am going to hold off on that for the moment. I am also interested in using that system so that I can have the server send me an email (text) to my phone so that I know if it puked. This way I can remote in and make sure it actually came back up for me. Respectfully,James [font="Arial"]James D. Williams[/font] Link to comment Share on other sites More sharing options...
jchd Posted June 19, 2015 Share Posted June 19, 2015 Try IniReadSecTion(... instead. Shane0000 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
rsmedude Posted June 19, 2015 Author Share Posted June 19, 2015 OH FOR CRYING OUT LOUD!!!!!!!! Ok I feel uber stupid now! lol Thank you,James [font="Arial"]James D. Williams[/font] Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now