Какой-либо Monit как эквиваленты для окон OS? [закрытый]

Попробуйте это на месте:

Fragment fragment = null;
fragment = new HomeFragment();                                                              
//HomeFragment= fragment class to launch that
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.screen_area, fragment);
fragmentTransaction.commit();
11
задан Dan Tanner 24 March 2009 в 20:09
поделиться

1 ответ

Я не нашел там ничего, что соответствовало бы моим потребностям, поэтому я немного изучил сценарии Powershell и разработал решение, которое должно быть полезно и другим. Предполагая, что платформа Windows (в противном случае используйте monit!), Powershell действительно мощный и простой.

Сценарий sample-monitor.ps1:

$webClient = new-object System.Net.WebClient

###################################################
# BEGIN USER-EDITABLE VARIABLES

# the URL to ping
$HeartbeatUrl = "http://someplace.com/somepage/"

# the response string to look for that indicates things are working ok
$SuccessResponseString = "Some Text"

# the name of the windows service to restart (the service name, not the display name)
$ServiceName = "Tomcat6"

# the log file used for monitoring output
$LogFile = "c:\temp\heartbeat.log"

# used to indicate that the service has failed since the last time we checked.
$FailureLogFile = "c:\temp\failure.log"

# END USER-EDITABLE VARIABLES
###################################################

# create the log file if it doesn't already exist.
if (!(Test-Path $LogFile)) {
    New-Item $LogFile -type file
}

$startTime = get-date
$output = $webClient.DownloadString($HeartbeatUrl)
$endTime = get-date

if ($output -like "*" + $SuccessResponseString + "*") {
    # uncomment the below line if you want positive confirmation
    #"Success`t`t" + $startTime.DateTime + "`t`t" + ($endTime - $startTime).TotalSeconds + " seconds" >> $LogFile

    # remove the FailureLog if it exists to indicate we're in good shape.
    if (Test-Path $FailureLogFile) {
        Remove-Item $FailureLogFile
    }

} 
else {
    "Fail`t`t" + $startTime.DateTime + "`t`t" + ($endTime - $startTime).TotalSeconds + " seconds" >> $LogFile

    # restart the service if this is the first time it's failed since the last successful check.
    if (!(Test-Path $FailureLogFile)) {
        New-Item $FailureLogFile -type file
        "Initial failure:" + $startTime.DateTime >> $FailureLogFile
        Restart-Service $ServiceName
    }
}

Единственная логика в этом сценарии состоит в том, что он будет пытаться перезапустить службу только один раз после первоначального сбоя. Это сделано для предотвращения ситуации, когда для перезапуска службы требуется некоторое время, и во время перезапуска монитор продолжает видеть сбой и перезапускается снова (плохой бесконечный цикл). В противном случае вы можете сделать что угодно, например, добавить уведомления по электронной почте или сделать больше, чем просто перезапустить службу.

Этот сценарий будет выполняться один раз, что означает, что вам нужно будет контролировать его повторение извне. Вы можете поместить его в бесконечный цикл прямо в скрипте, но это кажется немного нестабильным. Я использовал планировщик задач Windows, Программа: Powershell.exe аргументы: -команда "C: \ projects \ foo \ scripts \ monitor.ps1" -noprofile Начать в: C: \ projects \ foo \ scripts

Вы также можете использовать более надежный планировщик, такой как VisualCron, подключить его к службе Windows или через планировщик сервера приложений, такой как Quart.NET. В моем случае планировщик задач работает нормально.

7
ответ дан 3 December 2019 в 10:45
поделиться