Jump to content

Checking process and email if not running


Ram
 Share

Recommended Posts

Hi,

At work - A program is running on Windows 2003 machine. For some reason this program keeps closing down always. We have managed to get the program running on services.

Now I would like to have an automatic checker that keeps checking if the program is running or not and also keep checking if windows 2003 machine is running or not - if any one of them fail or both fail I would like to recieve an email?

I want to check this through another machine which is in the same network? Is this possible - if so how?

Awaiting your response!

Thanks!

Edited by Ram
Link to comment
Share on other sites

For a company environment you usually use something like NAGIOS to check your IT equipment.

Otherwise you can use ping to check the machine and WMI to check the service.

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

Well I would first check it by pinging it like water said if its not up then you can skip the rest. If it is up then to check if the program is running you need the name of the process then you could use something like this

$Run = Run(@ComSpec & ' /c tasklist /s name_of_server_running_program_or_ip', @SystemDir, @SW_HIDE, 6)
While ProcessExists($Run)
    Sleep(100)
    $Services = StdoutRead($Run, True)
WEnd
$aServices = StringSplit($Services, @LF)
For $x = 1 To UBound($aServices) - 1
    If StringInStr($aServices[$x], "name_of_process.exe") Then
        $good = 1
    EndIf
Next
If $good = 1 Then
    _add_email_funcion_here("program good")
Else
    _add_email_funcion_here("program not running")
EndIf
Edited by Onichan
Link to comment
Share on other sites

Well I would first check it by pinging it like water said if its not up then you can skip the rest. If it is up then to check if the program is running you need the name of the process then you could use something like this

$Run = Run(@ComSpec & ' /c tasklist /s name_of_server_running_program_or_ip', @SystemDir, @SW_HIDE, 6)
While ProcessExists($Run)
    Sleep(100)
    $Services = StdoutRead($Run, True)
WEnd
$aServices = StringSplit($Services, @LF)
For $x = 1 To UBound($aServices) - 1
    If StringInStr($aServices[$x], "name_of_process.exe") Then
        $good = 1
    EndIf
Next
If $good = 1 Then
    _add_email_funcion_here("program good")
Else
    _add_email_funcion_here("program not running")
EndIf

Thanks for the code I get error in $good = 1 as it says it is not been declared. what shall I do here?

BTW: This is not a big company where we can afford for software and hence we are just using free tool. And more over we are not public too.

Link to comment
Share on other sites

Oh sorry I forgot to declare it, but even then you know that isn't the full code that you would need I didn't include something to email. I have used Jos SMTP Mailer which you can look at Here. You will need to modify the variales at the top and remember to change the process name and server ip or name.

#Include<file.au3>
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Global $Good = 0

$SmtpServer = "MailServer"              ; address for the smtp-server to use - REQUIRED
$FromName = "Name"                      ; name from who the email was sent
$FromAddress = "your@Email.Address.com" ; address from where the mail should come
$ToAddress = "your@Email.Address.com"   ; destination address of the email - REQUIRED
;~ $Subject = "Process Status"                  ; subject from the email - can be anything you want it to be
;~ $Body = ""                               ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = ""                       ; the file you want to attach- leave blank if not needed
$CcAddress = ""                         ; address for cc - leave blank if not needed
$BccAddress = ""                        ; address for bcc - leave blank if not needed
$Importance = "Normal"                  ; Send message priority: "High", "Normal", "Low"
$Username = "******"                    ; username for the account used from where the mail gets sent - REQUIRED
$Password = "********"                  ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = 25                            ; port used for sending the mail
$ssl = 0                                ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                          ; GMAIL port used for sending the mail
;~ $ssl=1                               ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

$Run = Run(@ComSpec & ' /c tasklist /s name_of_server_running_program_or_ip', @SystemDir, @SW_HIDE, 6)
While ProcessExists($Run)
    Sleep(100)
    $Services = StdoutRead($Run, True)
WEnd
$aServices = StringSplit($Services, @LF)
For $x = 1 To UBound($aServices) - 1
    If StringInStr($aServices[$x], "name_of_process.exe") Then
    $Good = 1
        ExitLoop
    EndIf
Next
If $Good = 1 Then
    $Subject = "Good"
    $Body = "Program is running"
Else
    $Subject = "BAD"
    $Body = "Program is NOT Running"
EndIf



$Send = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $Send)
EndIf
;
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
    $objEmail.HTMLBody = $as_Body
    Else
    $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
    Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
    For $x = 1 To $S_Files2Attach[0]
    $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
    ConsoleWrite('@@ Debug(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
    If FileExists($S_Files2Attach[$x]) Then
    $objEmail.AddAttachment ($S_Files2Attach[$x])
    Else
    ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
    SetError(1)
    Return 0
    EndIf
    Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
    Case "High"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
    Case "Normal"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
    Case "Low"
    $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
    SetError(2)
    Return $oMyRet[1]
    EndIf
    $objEmail=""
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
EndFunc ;==>MyErrFunc
Edited by Onichan
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...