Go-based tooling used to detect whether a restart (service) or reboot (system) is needed.
- Project home
- Overview
- Features
- Changelog
- Requirements
- Installation
- Configuration
- Examples
- License
- References
See our GitHub repo for the latest code, to file an issue or submit improvements for review and potential inclusion into the project.
This repo is intended to provide various tools used to detect whether a restart (service) or reboot (system) is needed.
Tool Name | Overall Status | Description |
---|---|---|
check_reboot |
Alpha | Nagios plugin used to monitor for "reboot needed" status of Windows systems |
-
Nagios plugin (
check_reboot
) for monitoring "reboot needed" status of Windows systems- NOTE: The intent is to support multiple operating systems, but as of this
writing Windows is the only supported OS
- see linux
- NOTE: The intent is to support multiple operating systems, but as of this
writing Windows is the only supported OS
-
Optionally list ignored assertions
- ignored assertions are not shown by default
-
Optionally disable list of default ignored paths
- by default a small list of ignored paths are used to prevent known problematic assertion matches from affecting service check results
-
Optional branding "signature"
- used to indicate what Nagios plugin (and what version) is responsible for the service check result
-
Optional, leveled logging using
rs/zerolog
packagelogfmt
format output (tostderr
)- choice of
disabled
,panic
,fatal
,error
,warn
,info
(the default),debug
ortrace
.
See the CHANGELOG.md
file for the changes associated with
each release of this application. Changes that have been merged to master
,
but not yet an official release may also be noted in the file under the
Unreleased
section. A helpful link to the Git commit history since the last
official release is also provided for further review.
The following is a loose guideline. Other combinations of Go and operating systems for building and running tools from this repo may work, but have not been tested.
- Go
- see this project's
go.mod
file for preferred version - this project tests against officially supported Go
releases
- the most recent stable release (aka, "stable")
- the prior, but still supported release (aka, "oldstable")
- see this project's
- GCC
- if building with custom options (as the provided
Makefile
does)
- if building with custom options (as the provided
make
- if using the provided
Makefile
- if using the provided
-
Windows 8.1
-
Windows 10
-
Windows Server 2012 R2
-
Windows Server 2016
-
Windows Server 2019
-
Windows Server 2022
- Download Go
- Install Go
- Clone the repo
cd /tmp
git clone https://github.com/atc0005/check-restart
cd check-restart
- Install dependencies (optional)
- for Ubuntu Linux
sudo apt-get install make gcc
- for CentOS Linux
sudo yum install make gcc
- for Ubuntu Linux
- Build
- manually, explicitly specifying target OS and architecture
GOOS=windows GOARCH=amd64 go build -mod=vendor ./cmd/check_reboot/
- most likely this is what you want
- substitute
amd64
with the appropriate architecture if using different hardware (e.g.,arm64
)
- using Makefile
windows
recipemake windows
- generates x86 and x64 binaries
- using Makefile
release-build
recipemake release-build
- generates the same release assets as provided by this project's releases
- manually, explicitly specifying target OS and architecture
- Locate generated binaries
- if using
Makefile
- look in
/tmp/check-restart/release_assets/check_reboot/
- look in
- if using
go build
- look in
/tmp/check-restart/
- look in
- if using
- Copy the applicable binaries to whatever systems needs to run them so that they can be deployed
NOTE: Depending on which Makefile
recipe you use the generated binary
may be compressed and have an xz
extension. If so, you should decompress the
binary first before deploying it (e.g., xz -d check_reboot-windows-amd64.exe.xz
).
- Download the latest release binaries
- Decompress binaries
- e.g.,
xz -d check_reboot-windows-amd64.exe.xz
- e.g.,
- Copy the applicable binaries to whatever systems needs to run them so that they can be deployed
-
Place
check_reboot
in a location where it can be executed by the monitoring agent- Usually the same place as other Nagios plugins
- For example, on a default Windows system with
NSClient++ x64
installed thecheck_reboot.exe
plugin would be deployed toC:\Program Files\NSClient++\scripts\custom\check_reboot.exe
-
Update the monitoring agent configuration configuration (on a system that you wish to monitor for "needs reboot" condition) to create a new command definition
-
We will pretend that the DNS name for the system is
windows.example.com
-
[/settings/external scripts/scripts] ; NOTE: stderr output is returned mixed in with stdout content. Disable logging to prevent this. ; check_reboot=scripts\\custom\\check_reboot.exe --verbose --show-ignored --log-level disabled ; ; By default specific paths are ignored. You can optionally disable the default ignored paths. ; check_reboot=scripts\\custom\\check_reboot.exe --verbose --show-ignored --disable-default-ignored ; check_reboot=scripts\\custom\\check_reboot.exe --verbose --show-ignored
-
see NSClient++ External scripts doc for additional details
-
-
Restart the
nscp
service (label ofNSClient++ (x64)
) -
Create a new Nagios "console" command definition to allow requesting the monitoring agent to run the plugin
-
define command { # $ARG1$ is an optional non-default port command_name wcheck_reboot command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -p $ARG1$ -t 30 -c check_reboot }
-
-
Create a new Nagios "console" service check that requests the monitoring agent to execute the plugin
-
define service { host_name windows.example.com service_description check reboot use generic-service check_command wcheck_reboot!12345!!!!!!! notification_period 24x7withMaintenanceWindow contacts atc0005 register 1 }
-
- Use the
-h
or--help
flag to display current usage information. - Flags marked as
required
must be set via CLI flag. - Flags not marked as required are for settings where a useful default is already defined, but may be overridden if desired.
Flag | Required | Default | Repeat | Possible | Description |
---|---|---|---|---|---|
branding |
No | false |
No | branding |
Toggles emission of branding details with plugin status details. This output is disabled by default. |
h , help |
No | false |
No | h , help |
Show Help text along with the list of supported flags. |
version |
No | false |
No | version |
Whether to display application version and then immediately exit application. |
v , verbose |
No | false |
No | v , verbose |
Toggles emission of detailed output. This level of output is disabled by default. |
si , show-ignored |
No | false |
No | si , show-ignored |
Toggles emission of ignored assertion matches in the final plugin output. This is disabled by default. |
dd , disable-default-ignored |
No | false |
No | dd , disable-default-ignored |
Disables use of default ignored assertion path entries. |
ll , log-level |
No | info |
No | disabled , panic , fatal , error , warn , info , debug , trace |
Log message priority filter. Log messages with a lower level are ignored. |
Early testing using NSClient++ suggests that both stderr
and stdout
are
mixed together and sent back to the Nagios console as one output stream.
If this becomes a problem you can disable logging output (--log-level disabled
) to prevent stderr
from being including in the output sent back to
the Nagios console.
If you know of a way to prevent stderr
from being mixed into the output sent
back to Nagios, please file a GitHub issue in this project to share your
findings.
No reboot needed.
This output is emitted by the plugin when a reboot is not needed.
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe"
OK: Reboot not needed (assertions: 15 applied, 0 matched, 0 ignored)
Reboot not required
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=0;;;; 'time'=42ms;;;;
Regarding the output:
- The last line beginning with a space and the
|
symbol are performance data metrics emitted by the plugin. Depending on your monitoring system, these metrics may be collected and exposed as graphs/charts. - This output was captured on a Windows 10 system, but is comparable to the output emitted by other Windows desktop & server systems.
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe" --verbose --show-ignored
OK: Reboot not needed (assertions: 15 applied, 0 matched, 1 ignored)
Reboot not required
Assertions ignored:
- Subkeys for key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Services/Pending found
subkey: 117cab2d-82b1-4b5a-a08c-4d62dbee7782
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=1;;;; 'matched_assertions'=0;;;; 'time'=1ms;;;;
Regarding the output:
- The last line beginning with a space and the
|
symbol are performance data metrics emitted by the plugin. Depending on your monitoring system, these metrics may be collected and exposed as graphs/charts. - The
--verbose
flag is used to display additional details (where available) for an assertion match. - The
--show-ignored
flag is used to display assertions whose evaluation results were recorded, but are ignored when determining final plugin state. - This output was captured on a Windows Server 2012 system, but is comparable to the output emitted by other Windows desktop & server systems.
This example uses the --disable-default-ignored
flag to skip using the
default ignored assertion path entries. This can be useful for cases where a
sysadmin wants to apply the assertion match results for all discovered
paths, even ones historically found to be false-positives or otherwise
unreliable.
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe" --verbose --disable-default-ignored
WARNING: Reboot needed (assertions: 15 applied, 1 matched, 0 ignored)
**ERRORS**
* reboot assertions matched, reboot needed
**DETAILED INFO**
Reboot required because:
- Subkeys for key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Services/Pending found
subkey: 117cab2d-82b1-4b5a-a08c-4d62dbee7782
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=1;;;; 'time'=0ms;;;;
Regarding the output:
- The last line beginning with a space and the
|
symbol are performance data metrics emitted by the plugin. Depending on your monitoring system, these metrics may be collected and exposed as graphs/charts. - The
--verbose
flag is used to display additional details (where available) for an assertion match. - The
--disable-default-ignored
flag indicates that the default ignored path entries will not be used; all discovered paths will be used to determine final plugin state. - This output was captured on a Windows Server 2012 system, but is comparable to the output emitted by other Windows desktop & server systems.
This output is emitted by the plugin when a reboot is needed.
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe"
WARNING: Reboot needed (assertions: 15 applied, 5 matched, 0 ignored)
**ERRORS**
* reboot assertions matched, reboot needed
**DETAILED INFO**
Reboot required because:
- Value PendingFileRenameOperations of type MULTI_SZ for key HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Auto Update/RebootRequired found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/RebootPending found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/PackagesPending found
- File C:/Windows/WinSxS/pending.xml found
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=5;;;; 'time'=1ms;;;;
Regarding the output:
- The last line beginning with a space and the
|
symbol are performance data metrics emitted by the plugin. Depending on your monitoring system, these metrics may be collected and exposed as graphs/charts. - This output was captured on a Windows Server 2022 system, but is comparable to the output emitted by other Windows desktop & server systems.
C:\Users\Administrator>"C:\Program Files\NSClient++\scripts\custom\check_reboot.exe" --verbose
WARNING: Reboot needed (assertions: 15 applied, 5 matched, 0 ignored)
**ERRORS**
* reboot assertions matched, reboot needed
**DETAILED INFO**
Reboot required because:
- Value PendingFileRenameOperations of type MULTI_SZ for key HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager found
Entries [14 total, 12 skipped]: C:/Program Files (x86)/Microsoft/EdgeUpdate/1.3.167.21, C:/Windows/Temp/f7cbd550-567a-4a88-a3e4-c67b414b439d.tmp
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/WindowsUpdate/Auto Update/RebootRequired found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/RebootPending found
- Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Component Based Servicing/PackagesPending found
- File C:/Windows/WinSxS/pending.xml found
| 'errors'=0;;;; 'evaluated_assertions'=15;;;; 'evaluated_file_assertions'=1;;;; 'evaluated_registry_assertions'=14;;;; 'ignored_assertions'=0;;;; 'matched_assertions'=5;;;; 'time'=0ms;;;;
Regarding the output:
- The last line beginning with a space and the
|
symbol are performance data metrics emitted by the plugin. Depending on your monitoring system, these metrics may be collected and exposed as graphs/charts. - The
--verbose
flag is used to display additional details (where available) for an assertion match. - This output was captured on a Windows Server 2022 system, but is comparable to the output emitted by other Windows desktop & server systems.
This result is returned when an error occurs during the attempt to determine whether a reboot is needed.
TODO: Provide example output when this scenario is encountered.
See the LICENSE file for details.