{"id":1219,"date":"2026-07-20T10:43:00","date_gmt":"2026-07-20T07:43:00","guid":{"rendered":"https:\/\/itgen.itbumper.com\/?page_id=1219"},"modified":"2026-07-20T10:43:01","modified_gmt":"2026-07-20T07:43:01","slug":"0052_mobaxterm-macros-10-debian-health-check","status":"publish","type":"page","link":"https:\/\/itgen.itbumper.com\/?page_id=1219","title":{"rendered":"0052_MobaXterm macros: 10.Debian-Health Check"},"content":{"rendered":"\n<p>10.1 Failed Services\u00a0<br \/>10.2 Filesystems Above Threshold (80%) .<br \/>10.3 Inodes Above Threshold\u00a0<br \/>10.4 Memory Pressure \u0410\u043d\u0430\u043b\u0438\u0437 PSI (Pressure Stall Information).\u00a0<br \/>10.5 Swap Usage and Activity (swap-in\/swap-out)<br \/>10.6 System Load &#8211; compare with Load Average\u00a0<br \/>10.7 Disk and Filesystem Errors (I\/O, EXT4, XFS, Btrfs, ZFS, NVMe and etc.)\u00a0<br \/>10.8 Network Errors (Link Down, Carrier Loss, NETDEV WATCHDOG, TX Timeout and etc.).<br \/>10.9 SMART Health\u00a0<br \/>10.10 ZFS Health\u00a0 (degraded-pools, ro\/rw errors ,scrub)<br \/>10.11 mdadm RAID Health (degraded, recovery, reshape and etc.)<br \/>10.12 Time Synchronization (NTP).\u00a0<br \/>10.13 Health Summary (Overall Health).<\/p>\n\n\n\n<p><strong data-start=\"361\" data-end=\"376\">Why Base64?<\/strong><br data-start=\"376\" data-end=\"379\" \/>Base64 encoding allows complex multi-line Bash scripts to be safely delivered as a single command, avoiding issues with line breaks, quoting, and macro parsing while preserving the original script intact. Use: printf %s &lt;base64_data&gt; | base64 -d | bash<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nprintf %s 'IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyA9PT09PT09PT09PT09PT09PT09PSAxMC4gSEVBTFRIIENIRUNLID09PT09PT09PT09PT09PT09PT09CgplY2hvICI9PT09PT09PT09PT09PT09PT09PSAxMC4gSEVBTFRIIENIRUNLID09PT09PT09PT09PT09PT09PT09IgoKcHJpbnRmICJcbiIKCk9WRVJBTExfU1RBVFVTPSJPSyIKCiMgLS0tIDEwLjEgRkFJTEVEIFNFUlZJQ0VTIC0tLQoKZWNobyAiMTAuMSBGQUlMRUQgU0VSVklDRVMiCgpGQUlMRURfU0VSVklDRVNfQ09VTlQ9JCgKICAgIHN5c3RlbWN0bCAtLWZhaWxlZCBcCiAgICAgICAgLS10eXBlPXNlcnZpY2UgXAogICAgICAgIC0tbm8tbGVnZW5kIFwKICAgICAgICAtLXBsYWluIFwKICAgICAgICAyPi9kZXYvbnVsbCB8IFwKICAgICAgICBhd2sgJ05GIHtjb3VudCsrfSBFTkQge3ByaW50IGNvdW50KzB9JwopCgppZiBbICIke0ZBSUxFRF9TRVJWSUNFU19DT1VOVDotMH0iIC1ndCAwIF07IHRoZW4KICAgIGVjaG8gIkNSSVRJQ0FMOiAkRkFJTEVEX1NFUlZJQ0VTX0NPVU5UIGZhaWxlZCBzZXJ2aWNlKHMpIGRldGVjdGVkIgoKICAgIHN5c3RlbWN0bCAtLWZhaWxlZCBcCiAgICAgICAgLS10eXBlPXNlcnZpY2UgXAogICAgICAgIC0tbm8tcGFnZXIgXAogICAgICAgIDI+L2Rldi9udWxsCgogICAgT1ZFUkFMTF9TVEFUVVM9IkNSSVRJQ0FMIgplbHNlCiAgICBlY2hvICJPSzogTm8gZmFpbGVkIHN5c3RlbWQgc2VydmljZXMgZGV0ZWN0ZWQiCmZpCgpwcmludGYgIlxuJS4wcyIgezEuLjN9CgojIC0tLSAxMC4yIEZJTEVTWVNURU1TIEFCT1ZFIFRIUkVTSE9MRCAtLS0KCmVjaG8gIjEwLjIgRklMRVNZU1RFTVMgQUJPVkUgVEhSRVNIT0xEIgoKREZfT1VUUFVUPSQodGltZW91dCA4IGRmIC1oVCAyPi9kZXYvbnVsbCkKCmlmIFsgLW4gIiRERl9PVVRQVVQiIF07IHRoZW4KICAgIEZTX09WRVJfTElNSVQ9JCgKICAgICAgICBwcmludGYgIiVzXG4iICIkREZfT1VUUFVUIiB8IFwKICAgICAgICBhd2sgJwogICAgICAgICAgICBOUiA+IDEgewogICAgICAgICAgICAgICAgdXNlPSQ2CiAgICAgICAgICAgICAgICBnc3ViKC8lLywgIiIsIHVzZSkKICAgICAgICAgICAgICAgIGlmICh1c2UgfiAvXlswLTldKyQvICYmIHVzZSA+PSA4MCkgewogICAgICAgICAgICAgICAgICAgIHByaW50CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAnCiAgICApCgogICAgaWYgWyAtbiAiJEZTX09WRVJfTElNSVQiIF07IHRoZW4KICAgICAgICBlY2hvICJXQVJOSU5HOiBGaWxlc3lzdGVtcyBhdCBvciBhYm92ZSA4MCUgdXNhZ2U6IgogICAgICAgIHByaW50ZiAiJXNcbiIgIiRERl9PVVRQVVQiIHwgaGVhZCAtMQogICAgICAgIHByaW50ZiAiJXNcbiIgIiRGU19PVkVSX0xJTUlUIgoKICAgICAgICBbICIkT1ZFUkFMTF9TVEFUVVMiID0gIk9LIiBdICYmIE9WRVJBTExfU1RBVFVTPSJXQVJOSU5HIgogICAgZWxzZQogICAgICAgIGVjaG8gIk9LOiBBbGwgZmlsZXN5c3RlbXMgYXJlIGJlbG93IDgwJSB1c2FnZSIKICAgIGZpCmVsc2UKICAgIEZTX09WRVJfTElNSVQ9IiIKICAgIGVjaG8gIldBUk5JTkc6IEZpbGVzeXN0ZW0gdXNhZ2UgcXVlcnkgdW5hdmFpbGFibGUgb3IgdGltZWQgb3V0IgoKICAgIFsgIiRPVkVSQUxMX1NUQVRVUyIgPSAiT0siIF0gJiYgT1ZFUkFMTF9TVEFUVVM9IldBUk5JTkciCmZpCgpwcmludGYgIlxuJS4wcyIgezEuLjN9CgojIC0tLSAxMC4zIElOT0RFUyBBQk9WRSBUSFJFU0hPTEQgLS0tCgplY2hvICIxMC4zIElOT0RFUyBBQk9WRSBUSFJFU0hPTEQiCgpERl9JTk9ERV9PVVRQVVQ9JCh0aW1lb3V0IDggZGYgLWloIDI+L2Rldi9udWxsKQoKaWYgWyAtbiAiJERGX0lOT0RFX09VVFBVVCIgXTsgdGhlbgogICAgSU5PREVfT1ZFUl9MSU1JVD0kKAogICAgICAgIHByaW50ZiAiJXNcbiIgIiRERl9JTk9ERV9PVVRQVVQiIHwgXAogICAgICAgIGF3ayAnCiAgICAgICAgICAgIE5SID4gMSB7CiAgICAgICAgICAgICAgICB1c2U9JDUKICAgICAgICAgICAgICAgIGdzdWIoLyUvLCAiIiwgdXNlKQogICAgICAgICAgICAgICAgaWYgKHVzZSB+IC9eWzAtOV0rJC8gJiYgdXNlID49IDgwKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICcKICAgICkKCiAgICBpZiBbIC1uICIkSU5PREVfT1ZFUl9MSU1JVCIgXTsgdGhlbgogICAgICAgIGVjaG8gIldBUk5JTkc6IEZpbGVzeXN0ZW1zIGF0IG9yIGFib3ZlIDgwJSBpbm9kZSB1c2FnZToiCiAgICAgICAgcHJpbnRmICIlc1xuIiAiJERGX0lOT0RFX09VVFBVVCIgfCBoZWFkIC0xCiAgICAgICAgcHJpbnRmICIlc1xuIiAiJElOT0RFX09WRVJfTElNSVQiCgogICAgICAgIFsgIiRPVkVSQUxMX1NUQVRVUyIgPSAiT0siIF0gJiYgT1ZFUkFMTF9TVEFUVVM9IldBUk5JTkciCiAgICBlbHNlCiAgICAgICAgZWNobyAiT0s6IEFsbCBmaWxlc3lzdGVtcyBhcmUgYmVsb3cgODAlIGlub2RlIHVzYWdlIgogICAgZmkKZWxzZQogICAgSU5PREVfT1ZFUl9MSU1JVD0iIgogICAgZWNobyAiV0FSTklORzogSW5vZGUgdXNhZ2UgcXVlcnkgdW5hdmFpbGFibGUgb3IgdGltZWQgb3V0IgoKICAgIFsgIiRPVkVSQUxMX1NUQVRVUyIgPSAiT0siIF0gJiYgT1ZFUkFMTF9TVEFUVVM9IldBUk5JTkciCmZpCgpwcmludGYgIlxuJS4wcyIgezEuLjN9CgojIC0tLSAxMC40IE1FTU9SWSBQUkVTU1VSRSAtLS0KCmVjaG8gIjEwLjQgTUVNT1JZIFBSRVNTVVJFIgoKTUVNX1BSRVNTX0FWRz0iIgoKaWYgWyAtZiAvcHJvYy9wcmVzc3VyZS9tZW1vcnkgXTsgdGhlbgogICAgTUVNX1BSRVNTX0FWRz0kKAogICAgICAgIGF3ayAnCiAgICAgICAgICAgICQxID09ICJzb21lIiB7CiAgICAgICAgICAgICAgICBmb3IgKGk9MTsgaTw9TkY7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGlmICgkaSB+IC9eYXZnMTA9LykgewogICAgICAgICAgICAgICAgICAgICAgICBzcGxpdCgkaSwgdmFsdWUsICI9IikKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgdmFsdWVbMl0KICAgICAgICAgICAgICAgICAgICAgICAgZXhpdAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICcgL3Byb2MvcHJlc3N1cmUvbWVtb3J5CiAgICApCgogICAgaWYgYXdrIC12IHZhbHVlPSIke01FTV9QUkVTU19BVkc6LTB9IiBcCiAgICAgICAgJ0JFR0lOIHtleGl0ICEodmFsdWUgPiAxMC4wKX0nCiAgICB0aGVuCiAgICAgICAgZWNobyAiV0FSTklORzogTWVtb3J5IFBTSSBhdmcxMCBpcyBoaWdoOiAke01FTV9QUkVTU19BVkc6LXVua25vd259IgogICAgICAgIGNhdCAvcHJvYy9wcmVzc3VyZS9tZW1vcnkKCiAgICAgICAgWyAiJE9WRVJBTExfU1RBVFVTIiA9ICJPSyIgXSAmJiBPVkVSQUxMX1NUQVRVUz0iV0FSTklORyIKICAgIGVsc2UKICAgICAgICBlY2hvICJPSzogTWVtb3J5IFBTSSBhdmcxMCBpcyB3aXRoaW4gdGhyZXNob2xkOiAke01FTV9QUkVTU19BVkc6LTB9IgogICAgZmkKZWxzZQogICAgZWNobyAiSU5GTzogTWVtb3J5IFBTSSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMga2VybmVsIgpmaQoKcHJpbnRmICJcbiUuMHMiIHsxLi4zfQoKIyAtLS0gMTAuNSBTV0FQIFVTQUdFIEFORCBBQ1RJVklUWSAtLS0KCmVjaG8gIjEwLjUgU1dBUCBVU0FHRSBBTkQgQUNUSVZJVFkiCgpTV0FQX1RPVEFMX01FVFJJQz0kKAogICAgZnJlZSAtYiAyPi9kZXYvbnVsbCB8IFwKICAgIGF3ayAnL15Td2FwOi8ge3ByaW50ICQyfScKKQoKU1dBUF9VU0VEX01FVFJJQz0kKAogICAgZnJlZSAtYiAyPi9kZXYvbnVsbCB8IFwKICAgIGF3ayAnL15Td2FwOi8ge3ByaW50ICQzfScKKQoKU1dBUF9QQ1RfTUVUUklDPTAKU1dBUF9BQ1RJVklUWT0wCgppZiBbICIke1NXQVBfVE9UQUxfTUVUUklDOi0wfSIgLWd0IDAgXTsgdGhlbgogICAgU1dBUF9QQ1RfTUVUUklDPSQoCiAgICAgICAgYXdrIFwKICAgICAgICAgICAgLXYgdXNlZD0iJHtTV0FQX1VTRURfTUVUUklDOi0wfSIgXAogICAgICAgICAgICAtdiB0b3RhbD0iJHtTV0FQX1RPVEFMX01FVFJJQzotMX0iIFwKICAgICAgICAgICAgJ0JFR0lOIHtwcmludGYgIiUuMGYiLCAodXNlZC90b3RhbCkqMTAwfScKICAgICkKCiAgICBTV0FQX0FDVElWSVRZPSQoCiAgICAgICAgdm1zdGF0IDEgMiAyPi9kZXYvbnVsbCB8IFwKICAgICAgICB0YWlsIC0xIHwgXAogICAgICAgIGF3ayAne3ByaW50ICQ3KyQ4fScKICAgICkKCiAgICBlY2hvICJTd2FwIHVzYWdlICAgIDogJHtTV0FQX1BDVF9NRVRSSUN9JSIKICAgIGVjaG8gIlN3YXAgYWN0aXZpdHkgOiAke1NXQVBfQUNUSVZJVFk6LTB9IHBhZ2VzL3MgY29tYmluZWQgc2krc28iCgogICAgaWYgWyAiJHtTV0FQX0FDVElWSVRZOi0wfSIgLWd0IDAgXTsgdGhlbgogICAgICAgIGVjaG8gIldBUk5JTkc6IEFjdGl2ZSBzd2FwLWluIG9yIHN3YXAtb3V0IGFjdGl2aXR5IGRldGVjdGVkIgogICAgICAgIGZyZWUgLWgKCiAgICAgICAgWyAiJE9WRVJBTExfU1RBVFVTIiA9ICJPSyIgXSAmJiBPVkVSQUxMX1NUQVRVUz0iV0FSTklORyIKICAgIGVsaWYgWyAiJHtTV0FQX1BDVF9NRVRSSUM6LTB9IiAtZ3QgNTAgXTsgdGhlbgogICAgICAgIGVjaG8gIklORk86IFN3YXAgdXNhZ2UgaXMgYWJvdmUgNTAlLCBidXQgbm8gY3VycmVudCBzd2FwIGFjdGl2aXR5IHdhcyBkZXRlY3RlZCIKICAgIGVsc2UKICAgICAgICBlY2hvICJPSzogU3dhcCB1c2FnZSBhbmQgYWN0aXZpdHkgYXJlIHdpdGhpbiBleHBlY3RlZCBsaW1pdHMiCiAgICBmaQplbHNlCiAgICBlY2hvICJJTkZPOiBTd2FwIGlzIG5vdCBjb25maWd1cmVkIgpmaQoKcHJpbnRmICJcbiUuMHMiIHsxLi4zfQoKIyAtLS0gMTAuNiBTWVNURU0gTE9BRCAtLS0KCmVjaG8gIjEwLjYgU1lTVEVNIExPQUQiCgpyZWFkIC1yIExPQURfT05FX01JTiBMT0FEX0ZJVkVfTUlOIExPQURfRklGVEVFTl9NSU4gXyA8IC9wcm9jL2xvYWRhdmcKCkNQVV9DT1JFU19DT1VOVD0kKAogICAgbnByb2MgMj4vZGV2L251bGwgfHwgXAogICAgZ3JlcCAtYyAnXnByb2Nlc3NvcicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8fCBcCiAgICBlY2hvIDEKKQoKTE9BRF9QRVJfQ09SRT0kKAogICAgYXdrIFwKICAgICAgICAtdiBsb2FkPSIke0xPQURfT05FX01JTjotMH0iIFwKICAgICAgICAtdiBjb3Jlcz0iJHtDUFVfQ09SRVNfQ09VTlQ6LTF9IiBcCiAgICAgICAgJ0JFR0lOIHsKICAgICAgICAgICAgaWYgKGNvcmVzIDwgMSkgewogICAgICAgICAgICAgICAgY29yZXM9MQogICAgICAgICAgICB9CiAgICAgICAgICAgIHByaW50ZiAiJS4yZiIsIGxvYWQvY29yZXMKICAgICAgICB9JwopCgplY2hvICJMb2FkIGF2ZXJhZ2UgOiAke0xPQURfT05FX01JTjotMH0gJHtMT0FEX0ZJVkVfTUlOOi0wfSAke0xPQURfRklGVEVFTl9NSU46LTB9IgplY2hvICJDUFUgY29yZXMgICAgOiAke0NQVV9DT1JFU19DT1VOVDotMX0iCmVjaG8gIkxvYWQvY29yZSAgICA6ICRMT0FEX1BFUl9DT1JFIgoKaWYgYXdrIC12IHZhbHVlPSIkTE9BRF9QRVJfQ09SRSIgXAogICAgJ0JFR0lOIHtleGl0ICEodmFsdWUgPj0gMS4wKX0nCnRoZW4KICAgIGVjaG8gIkNSSVRJQ0FMOiBPbmUtbWludXRlIGxvYWQgaXMgYXQgb3IgYWJvdmUgMS4wMCBwZXIgQ1BVIGNvcmUiCiAgICB1cHRpbWUKCiAgICBPVkVSQUxMX1NUQVRVUz0iQ1JJVElDQUwiCmVsaWYgYXdrIC12IHZhbHVlPSIkTE9BRF9QRVJfQ09SRSIgXAogICAgJ0JFR0lOIHtleGl0ICEodmFsdWUgPj0gMC43MCl9Jwp0aGVuCiAgICBlY2hvICJXQVJOSU5HOiBPbmUtbWludXRlIGxvYWQgaXMgYXQgb3IgYWJvdmUgMC43MCBwZXIgQ1BVIGNvcmUiCiAgICB1cHRpbWUKCiAgICBbICIkT1ZFUkFMTF9TVEFUVVMiID0gIk9LIiBdICYmIE9WRVJBTExfU1RBVFVTPSJXQVJOSU5HIgplbHNlCiAgICBlY2hvICJPSzogTm9ybWFsaXplZCBsb2FkIGlzIHdpdGhpbiB0aHJlc2hvbGQiCmZpCgpwcmludGYgIlxuJS4wcyIgezEuLjN9CgojIC0tLSAxMC43IERJU0sgQU5EIEZJTEVTWVNURU0gRVJST1JTIC0tLQoKZWNobyAiMTAuNyBESVNLIEFORCBGSUxFU1lTVEVNIEVSUk9SUyIKCmlmIGNvbW1hbmQgLXYgam91cm5hbGN0bCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgIERJU0tfRVJSX0hVTlQ9JCgKICAgICAgICBqb3VybmFsY3RsIFwKICAgICAgICAgICAgLWsgXAogICAgICAgICAgICAtYiAwIFwKICAgICAgICAgICAgLS1uby1wYWdlciBcCiAgICAgICAgICAgIDI+L2Rldi9udWxsIHwgXAogICAgICAgIGdyZXAgLUVpIFwKICAgICAgICAgICAgJ0kvTyBlcnJvcnxidWZmZXIgSS9PfGJsa191cGRhdGVfcmVxdWVzdHxjcml0aWNhbCBtZWRpdW0gZXJyb3J8dW5jb3JyZWN0YWJsZXxFWFQ0LWZzIGVycm9yfFhGUy4qZXJyb3J8QlRSRlMuKmVycm9yfFpGUy4qZXJyb3J8bnZtZS4qZXJyb3J8YmFkIHNlY3RvcnxyZWFkLW9ubHkgZmlsZSBzeXN0ZW0nIHwgXAogICAgICAgIHRhaWwgLTE1CiAgICApCmVsc2UKICAgIERJU0tfRVJSX0hVTlQ9JCgKICAgICAgICBkbWVzZyAyPi9kZXYvbnVsbCB8IFwKICAgICAgICBncmVwIC1FaSBcCiAgICAgICAgICAgICdJL08gZXJyb3J8YnVmZmVyIEkvT3xibGtfdXBkYXRlX3JlcXVlc3R8Y3JpdGljYWwgbWVkaXVtIGVycm9yfHVuY29ycmVjdGFibGV8RVhUNC1mcyBlcnJvcnxYRlMuKmVycm9yfEJUUkZTLiplcnJvcnxaRlMuKmVycm9yfG52bWUuKmVycm9yfGJhZCBzZWN0b3J8cmVhZC1vbmx5IGZpbGUgc3lzdGVtJyB8IFwKICAgICAgICB0YWlsIC0xNQogICAgKQpmaQoKaWYgWyAtbiAiJERJU0tfRVJSX0hVTlQiIF07IHRoZW4KICAgIGVjaG8gIkNSSVRJQ0FMOiBEaXNrIG9yIGZpbGVzeXN0ZW0gZXJyb3JzIGRldGVjdGVkOiIKICAgIHByaW50ZiAiJXNcbiIgIiRESVNLX0VSUl9IVU5UIgoKICAgIE9WRVJBTExfU1RBVFVTPSJDUklUSUNBTCIKZWxzZQogICAgZWNobyAiT0s6IE5vIGRpc2sgb3IgZmlsZXN5c3RlbSBlcnJvcnMgZGV0ZWN0ZWQgaW4gdGhlIGN1cnJlbnQgYm9vdCIKZmkKCnByaW50ZiAiXG4lLjBzIiB7MS4uM30KCiMgLS0tIDEwLjggTkVUV09SSyBFUlJPUlMgLS0tCgplY2hvICIxMC44IE5FVFdPUksgRVJST1JTIgoKaWYgY29tbWFuZCAtdiBqb3VybmFsY3RsID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAgTkVUX0VSUl9IVU5UPSQoCiAgICAgICAgam91cm5hbGN0bCBcCiAgICAgICAgICAgIC1rIFwKICAgICAgICAgICAgLWIgMCBcCiAgICAgICAgICAgIC0tbm8tcGFnZXIgXAogICAgICAgICAgICAyPi9kZXYvbnVsbCB8IFwKICAgICAgICBncmVwIC1FaSBcCiAgICAgICAgICAgICdsaW5rIGlzIGRvd258bGluayBkb3dufGxvc3QgY2FycmllcnxjYXJyaWVyIGxvc3R8TkVUREVWIFdBVENIRE9HfHRyYW5zbWl0IHF1ZXVlIHRpbWVkIG91dHx0eCB0aW1lb3V0fHJlc2V0IGFkYXB0ZXJ8ZmlybXdhcmUgZmFpbGVkJyB8IFwKICAgICAgICB0YWlsIC0xNQogICAgKQplbHNlCiAgICBORVRfRVJSX0hVTlQ9JCgKICAgICAgICBkbWVzZyAyPi9kZXYvbnVsbCB8IFwKICAgICAgICBncmVwIC1FaSBcCiAgICAgICAgICAgICdsaW5rIGlzIGRvd258bGluayBkb3dufGxvc3QgY2FycmllcnxjYXJyaWVyIGxvc3R8TkVUREVWIFdBVENIRE9HfHRyYW5zbWl0IHF1ZXVlIHRpbWVkIG91dHx0eCB0aW1lb3V0fHJlc2V0IGFkYXB0ZXJ8ZmlybXdhcmUgZmFpbGVkJyB8IFwKICAgICAgICB0YWlsIC0xNQogICAgKQpmaQoKaWYgWyAtbiAiJE5FVF9FUlJfSFVOVCIgXTsgdGhlbgogICAgZWNobyAiV0FSTklORzogTmV0d29yayBsaW5rIG9yIGFkYXB0ZXIgZXJyb3JzIGRldGVjdGVkOiIKICAgIHByaW50ZiAiJXNcbiIgIiRORVRfRVJSX0hVTlQiCgogICAgWyAiJE9WRVJBTExfU1RBVFVTIiA9ICJPSyIgXSAmJiBPVkVSQUxMX1NUQVRVUz0iV0FSTklORyIKZWxzZQogICAgZWNobyAiT0s6IE5vIG5ldHdvcmsgbGluayBvciBhZGFwdGVyIGVycm9ycyBkZXRlY3RlZCBpbiB0aGUgY3VycmVudCBib290IgpmaQoKcHJpbnRmICJcbiUuMHMiIHsxLi4zfQoKIyAtLS0gMTAuOSBTTUFSVCBIRUFMVEggLS0tCgplY2hvICIxMC45IFNNQVJUIEhFQUxUSCIKClNNQVJUX0VSUl9GTEFHPTAKU01BUlRfVU5LTk9XTl9GTEFHPTAKU01BUlRfREVWSUNFX0NPVU5UPTAKCmlmIGNvbW1hbmQgLXYgc21hcnRjdGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICB3aGlsZSBJRlM9IHJlYWQgLXIgREVWX0lEOyBkbwogICAgICAgIFsgLXogIiRERVZfSUQiIF0gJiYgY29udGludWUKCiAgICAgICAgU01BUlRfREVWSUNFX0NPVU5UPSQoKFNNQVJUX0RFVklDRV9DT1VOVCArIDEpKQoKICAgICAgICBTTUFSVF9PVVRQVVQ9JCgKICAgICAgICAgICAgc21hcnRjdGwgLUggIiRERVZfSUQiIDI+L2Rldi9udWxsCiAgICAgICAgKQoKICAgICAgICBpZiBwcmludGYgIiVzXG4iICIkU01BUlRfT1VUUFVUIiB8IFwKICAgICAgICAgICAgZ3JlcCAtRXFpICdQQVNTRUR8U01BUlQgSGVhbHRoIFN0YXR1czogT0t8b3ZlcmFsbC1oZWFsdGguKlBBU1NFRCcKICAgICAgICB0aGVuCiAgICAgICAgICAgIGVjaG8gIk9LOiBTTUFSVCBoZWFsdGggcGFzc2VkIG9uICRERVZfSUQiCiAgICAgICAgZWxpZiBwcmludGYgIiVzXG4iICIkU01BUlRfT1VUUFVUIiB8IFwKICAgICAgICAgICAgZ3JlcCAtRXFpICdGQUlMRUR8QkFEfENSSVRJQ0FMJwogICAgICAgIHRoZW4KICAgICAgICAgICAgZWNobyAiQ1JJVElDQUw6IFNNQVJUIGhlYWx0aCBmYWlsdXJlIHJlcG9ydGVkIG9uICRERVZfSUQiCiAgICAgICAgICAgIHByaW50ZiAiJXNcbiIgIiRTTUFSVF9PVVRQVVQiCgogICAgICAgICAgICBTTUFSVF9FUlJfRkxBRz0xCiAgICAgICAgICAgIE9WRVJBTExfU1RBVFVTPSJDUklUSUNBTCIKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gIklORk86IFNNQVJUIGhlYWx0aCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCBmb3IgJERFVl9JRCIKCiAgICAgICAgICAgIFNNQVJUX1VOS05PV05fRkxBRz0xCiAgICAgICAgZmkKICAgIGRvbmUgPCA8KAogICAgICAgIHNtYXJ0Y3RsIC0tc2NhbiAyPi9kZXYvbnVsbCB8IFwKICAgICAgICBhd2sgJ3twcmludCAkMX0nCiAgICApCgogICAgaWYgWyAiJFNNQVJUX0RFVklDRV9DT1VOVCIgLWVxIDAgXTsgdGhlbgogICAgICAgIGVjaG8gIklORk86IE5vIFNNQVJULWNhcGFibGUgZGV2aWNlcyBkaXNjb3ZlcmVkIGJ5IHNtYXJ0Y3RsIC0tc2NhbiIKICAgIGVsaWYgWyAiJFNNQVJUX0VSUl9GTEFHIiAtZXEgMCBdICYmIFsgIiRTTUFSVF9VTktOT1dOX0ZMQUciIC1lcSAwIF07IHRoZW4KICAgICAgICBlY2hvICJPSzogQWxsIGRpc2NvdmVyZWQgU01BUlQgZGV2aWNlcyByZXBvcnRlZCBoZWFsdGh5IgogICAgZmkKZWxzZQogICAgZWNobyAiSU5GTzogc21hcnRjdGwgaXMgbm90IGluc3RhbGxlZCIKZmkKCnByaW50ZiAiXG4lLjBzIiB7MS4uM30KCiMgLS0tIDEwLjEwIFpGUyBIRUFMVEggLS0tCgplY2hvICIxMC4xMCBaRlMgSEVBTFRIIgoKWkZTX0hFQUxUSF9TVEFUVVM9Ik5PVCBJTlNUQUxMRUQiCgppZiBjb21tYW5kIC12IHpwb29sID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAgWlBPT0xfRkFVTFRfTUFQPSQoCiAgICAgICAgenBvb2wgc3RhdHVzIC14IDI+L2Rldi9udWxsCiAgICApCgogICAgaWYgWyAteiAiJFpQT09MX0ZBVUxUX01BUCIgXTsgdGhlbgogICAgICAgIGVjaG8gIklORk86IE5vIFpGUyBwb29scyBkZXRlY3RlZCIKICAgICAgICBaRlNfSEVBTFRIX1NUQVRVUz0iTk8gUE9PTFMiCiAgICBlbGlmIHByaW50ZiAiJXNcbiIgIiRaUE9PTF9GQVVMVF9NQVAiIHwgXAogICAgICAgIGdyZXAgLXFpICdhbGwgcG9vbHMgYXJlIGhlYWx0aHknCiAgICB0aGVuCiAgICAgICAgZWNobyAiT0s6IEFsbCBaRlMgcG9vbHMgYXJlIGhlYWx0aHkiCiAgICAgICAgWkZTX0hFQUxUSF9TVEFUVVM9Ik9LIgogICAgZWxzZQogICAgICAgIGVjaG8gIkNSSVRJQ0FMOiBaRlMgcG9vbCBpc3N1ZSBkZXRlY3RlZDoiCiAgICAgICAgcHJpbnRmICIlc1xuIiAiJFpQT09MX0ZBVUxUX01BUCIKCiAgICAgICAgWkZTX0hFQUxUSF9TVEFUVVM9IkNSSVRJQ0FMIgogICAgICAgIE9WRVJBTExfU1RBVFVTPSJDUklUSUNBTCIKICAgIGZpCmVsc2UKICAgIGVjaG8gIklORk86IFpGUyB0b29scyBhcmUgbm90IGluc3RhbGxlZCIKZmkKCnByaW50ZiAiXG4lLjBzIiB7MS4uM30KCiMgLS0tIDEwLjExIE1EQURNIFJBSUQgSEVBTFRIIC0tLQoKZWNobyAiMTAuMTEgTURBRE0gUkFJRCBIRUFMVEgiCgpNREFETV9IRUFMVEhfU1RBVFVTPSJOT1QgQ09ORklHVVJFRCIKCmlmIFsgLXIgL3Byb2MvbWRzdGF0IF0gJiYgZ3JlcCAtcSAnXm1kWzAtOV0nIC9wcm9jL21kc3RhdDsgdGhlbgogICAgTURBRE1fSEVBTFRIX1NUQVRVUz0iT0siCgogICAgTURBRE1fUFJPQkxFTVM9JCgKICAgICAgICBncmVwIC1FIFwKICAgICAgICAgICAgJ2luYWN0aXZlfHJlY292ZXJ5fHJlc3luY3xyZXNoYXBlfGNoZWNrfFxbW1VfXSpfW1VfXSpcXScgXAogICAgICAgICAgICAvcHJvYy9tZHN0YXQgXAogICAgICAgICAgICAyPi9kZXYvbnVsbAogICAgKQoKICAgIGlmIFsgLW4gIiRNREFETV9QUk9CTEVNUyIgXTsgdGhlbgogICAgICAgIGVjaG8gIldBUk5JTkc6IG1kYWRtIGFycmF5IGlzIGRlZ3JhZGVkLCBpbmFjdGl2ZSwgb3IgcnVubmluZyBtYWludGVuYW5jZToiCiAgICAgICAgY2F0IC9wcm9jL21kc3RhdAoKICAgICAgICBNREFETV9IRUFMVEhfU1RBVFVTPSJXQVJOSU5HIgoKICAgICAgICBbICIkT1ZFUkFMTF9TVEFUVVMiID0gIk9LIiBdICYmIE9WRVJBTExfU1RBVFVTPSJXQVJOSU5HIgogICAgZWxzZQogICAgICAgIGVjaG8gIk9LOiBBY3RpdmUgbWRhZG0gYXJyYXlzIGFwcGVhciBoZWFsdGh5IgogICAgZmkKZWxzZQogICAgZWNobyAiSU5GTzogTm8gYWN0aXZlIG1kYWRtIGFycmF5cyBkZXRlY3RlZCIKZmkKCnByaW50ZiAiXG4lLjBzIiB7MS4uM30KCiMgLS0tIDEwLjEyIFRJTUUgU1lOQ0hST05JWkFUSU9OIC0tLQoKZWNobyAiMTAuMTIgVElNRSBTWU5DSFJPTklaQVRJT04iCgpUSU1FX1NZTkNfU1RBVFVTPSJVTktOT1dOIgoKaWYgY29tbWFuZCAtdiB0aW1lZGF0ZWN0bCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgIFRJTUVfU1lOQ19TVEFUVVM9JCgKICAgICAgICB0aW1lZGF0ZWN0bCBzaG93IFwKICAgICAgICAgICAgLXAgTlRQU3luY2hyb25pemVkIFwKICAgICAgICAgICAgLS12YWx1ZSBcCiAgICAgICAgICAgIDI+L2Rldi9udWxsCiAgICApCgogICAgaWYgWyAiJFRJTUVfU1lOQ19TVEFUVVMiID0gInllcyIgXTsgdGhlbgogICAgICAgIGVjaG8gIk9LOiBTeXN0ZW0gY2xvY2sgaXMgc3luY2hyb25pemVkIgogICAgICAgIFRJTUVfU1lOQ19TVEFUVVM9Ik9LIgogICAgZWxzZQogICAgICAgIGVjaG8gIldBUk5JTkc6IFN5c3RlbSBjbG9jayBpcyBub3Qgc3luY2hyb25pemVkIgogICAgICAgIHRpbWVkYXRlY3RsIHN0YXR1cyAyPi9kZXYvbnVsbAoKICAgICAgICBUSU1FX1NZTkNfU1RBVFVTPSJXQVJOSU5HIgoKICAgICAgICBbICIkT1ZFUkFMTF9TVEFUVVMiID0gIk9LIiBdICYmIE9WRVJBTExfU1RBVFVTPSJXQVJOSU5HIgogICAgZmkKZWxzZQogICAgZWNobyAiSU5GTzogdGltZWRhdGVjdGwgaXMgbm90IGF2YWlsYWJsZSIKZmkKCnByaW50ZiAiXG4lLjBzIiB7MS4uM30KCiMgLS0tIDEwLjEzIFNVTU1BUlkgLS0tCgplY2hvICIxMC4xMyBTVU1NQVJZIgoKZWNobyAiLS0tIENvcmUgR2xvYmFsIEluZnJhc3RydWN0dXJlIEhlYWx0aCBNYXRyaXggLS0tIgoKcHJpbnRmICJQbGF0Zm9ybSBOb2RlIEluc3RhbmNlLi4uJXNcbiIgXAogICAgIiQoaG9zdG5hbWUgMj4vZGV2L251bGwgfHwgZWNobyB1bnJlc29sdmVkKSIKCmlmIFsgIiR7RkFJTEVEX1NFUlZJQ0VTX0NPVU5UOi0wfSIgLWVxIDAgXTsgdGhlbgogICAgZWNobyAiU3lzdGVtZCBTZXJ2aWNlcy4uLi4uLi4uLi5PSyIKZWxzZQogICAgZWNobyAiU3lzdGVtZCBTZXJ2aWNlcy4uLi4uLi4uLi5DUklUSUNBTCAoJEZBSUxFRF9TRVJWSUNFU19DT1VOVCBmYWlsZWQpIgpmaQoKaWYgWyAteiAiJEZTX09WRVJfTElNSVQiIF07IHRoZW4KICAgIGVjaG8gIkZpbGVzeXN0ZW0gQ2FwYWNpdHkuLi4uLi4uT0siCmVsc2UKICAgIGVjaG8gIkZpbGVzeXN0ZW0gQ2FwYWNpdHkuLi4uLi4uV0FSTklORyIKZmkKCmlmIFsgLXogIiRJTk9ERV9PVkVSX0xJTUlUIiBdOyB0aGVuCiAgICBlY2hvICJJbm9kZSBDYXBhY2l0eS4uLi4uLi4uLi4uLk9LIgplbHNlCiAgICBlY2hvICJJbm9kZSBDYXBhY2l0eS4uLi4uLi4uLi4uLldBUk5JTkciCmZpCgppZiBbIC16ICIkRElTS19FUlJfSFVOVCIgXTsgdGhlbgogICAgZWNobyAiS2VybmVsIERpc2sgSGVhbHRoLi4uLi4uLi5PSyIKZWxzZQogICAgZWNobyAiS2VybmVsIERpc2sgSGVhbHRoLi4uLi4uLi5DUklUSUNBTCIKZmkKCmlmIFsgLXogIiRORVRfRVJSX0hVTlQiIF07IHRoZW4KICAgIGVjaG8gIk5ldHdvcmsgTGluayBIZWFsdGguLi4uLi4uT0siCmVsc2UKICAgIGVjaG8gIk5ldHdvcmsgTGluayBIZWFsdGguLi4uLi4uV0FSTklORyIKZmkKCmVjaG8gIlpGUyBIZWFsdGguLi4uLi4uLi4uLi4uLi4uJFpGU19IRUFMVEhfU1RBVFVTIgplY2hvICJtZGFkbSBIZWFsdGguLi4uLi4uLi4uLi4uLiRNREFETV9IRUFMVEhfU1RBVFVTIgplY2hvICJUaW1lIFN5bmNocm9uaXphdGlvbi4uLi4uLiRUSU1FX1NZTkNfU1RBVFVTIgplY2hvICJOb3JtYWxpemVkIExvYWQvQ29yZS4uLi4uLiRMT0FEX1BFUl9DT1JFIgplY2hvICJPdmVyYWxsIEhlYWx0aC4uLi4uLi4uLi4uLiRPVkVSQUxMX1NUQVRVUyIK' | base64 -d | bash\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# ==================== 10. HEALTH CHECK ====================\n\necho &quot;==================== 10. HEALTH CHECK ====================&quot;\n\nprintf &quot;\\n&quot;\n\nOVERALL_STATUS=&quot;OK&quot;\n\n# --- 10.1 FAILED SERVICES ---\n\necho &quot;10.1 FAILED SERVICES&quot;\n\nFAILED_SERVICES_COUNT=$(\n    systemctl --failed \\\n        --type=service \\\n        --no-legend \\\n        --plain \\\n        2&gt;\/dev\/null | \\\n        awk 'NF {count++} END {print count+0}'\n)\n\nif &#x5B; &quot;${FAILED_SERVICES_COUNT:-0}&quot; -gt 0 ]; then\n    echo &quot;CRITICAL: $FAILED_SERVICES_COUNT failed service(s) detected&quot;\n\n    systemctl --failed \\\n        --type=service \\\n        --no-pager \\\n        2&gt;\/dev\/null\n\n    OVERALL_STATUS=&quot;CRITICAL&quot;\nelse\n    echo &quot;OK: No failed systemd services detected&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.2 FILESYSTEMS ABOVE THRESHOLD ---\n\necho &quot;10.2 FILESYSTEMS ABOVE THRESHOLD&quot;\n\nDF_OUTPUT=$(timeout 8 df -hT 2&gt;\/dev\/null)\n\nif &#x5B; -n &quot;$DF_OUTPUT&quot; ]; then\n    FS_OVER_LIMIT=$(\n        printf &quot;%s\\n&quot; &quot;$DF_OUTPUT&quot; | \\\n        awk '\n            NR &gt; 1 {\n                use=$6\n                gsub(\/%\/, &quot;&quot;, use)\n                if (use ~ \/^&#x5B;0-9]+$\/ &amp;&amp; use &gt;= 80) {\n                    print\n                }\n            }\n        '\n    )\n\n    if &#x5B; -n &quot;$FS_OVER_LIMIT&quot; ]; then\n        echo &quot;WARNING: Filesystems at or above 80% usage:&quot;\n        printf &quot;%s\\n&quot; &quot;$DF_OUTPUT&quot; | head -1\n        printf &quot;%s\\n&quot; &quot;$FS_OVER_LIMIT&quot;\n\n        &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\n    else\n        echo &quot;OK: All filesystems are below 80% usage&quot;\n    fi\nelse\n    FS_OVER_LIMIT=&quot;&quot;\n    echo &quot;WARNING: Filesystem usage query unavailable or timed out&quot;\n\n    &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.3 INODES ABOVE THRESHOLD ---\n\necho &quot;10.3 INODES ABOVE THRESHOLD&quot;\n\nDF_INODE_OUTPUT=$(timeout 8 df -ih 2&gt;\/dev\/null)\n\nif &#x5B; -n &quot;$DF_INODE_OUTPUT&quot; ]; then\n    INODE_OVER_LIMIT=$(\n        printf &quot;%s\\n&quot; &quot;$DF_INODE_OUTPUT&quot; | \\\n        awk '\n            NR &gt; 1 {\n                use=$5\n                gsub(\/%\/, &quot;&quot;, use)\n                if (use ~ \/^&#x5B;0-9]+$\/ &amp;&amp; use &gt;= 80) {\n                    print\n                }\n            }\n        '\n    )\n\n    if &#x5B; -n &quot;$INODE_OVER_LIMIT&quot; ]; then\n        echo &quot;WARNING: Filesystems at or above 80% inode usage:&quot;\n        printf &quot;%s\\n&quot; &quot;$DF_INODE_OUTPUT&quot; | head -1\n        printf &quot;%s\\n&quot; &quot;$INODE_OVER_LIMIT&quot;\n\n        &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\n    else\n        echo &quot;OK: All filesystems are below 80% inode usage&quot;\n    fi\nelse\n    INODE_OVER_LIMIT=&quot;&quot;\n    echo &quot;WARNING: Inode usage query unavailable or timed out&quot;\n\n    &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.4 MEMORY PRESSURE ---\n\necho &quot;10.4 MEMORY PRESSURE&quot;\n\nMEM_PRESS_AVG=&quot;&quot;\n\nif &#x5B; -f \/proc\/pressure\/memory ]; then\n    MEM_PRESS_AVG=$(\n        awk '\n            $1 == &quot;some&quot; {\n                for (i=1; i&lt;=NF; i++) {\n                    if ($i ~ \/^avg10=\/) {\n                        split($i, value, &quot;=&quot;)\n                        print value&#x5B;2]\n                        exit\n                    }\n                }\n            }\n        ' \/proc\/pressure\/memory\n    )\n\n    if awk -v value=&quot;${MEM_PRESS_AVG:-0}&quot; \\\n        'BEGIN {exit !(value &gt; 10.0)}'\n    then\n        echo &quot;WARNING: Memory PSI avg10 is high: ${MEM_PRESS_AVG:-unknown}&quot;\n        cat \/proc\/pressure\/memory\n\n        &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\n    else\n        echo &quot;OK: Memory PSI avg10 is within threshold: ${MEM_PRESS_AVG:-0}&quot;\n    fi\nelse\n    echo &quot;INFO: Memory PSI is not available on this kernel&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.5 SWAP USAGE AND ACTIVITY ---\n\necho &quot;10.5 SWAP USAGE AND ACTIVITY&quot;\n\nSWAP_TOTAL_METRIC=$(\n    free -b 2&gt;\/dev\/null | \\\n    awk '\/^Swap:\/ {print $2}'\n)\n\nSWAP_USED_METRIC=$(\n    free -b 2&gt;\/dev\/null | \\\n    awk '\/^Swap:\/ {print $3}'\n)\n\nSWAP_PCT_METRIC=0\nSWAP_ACTIVITY=0\n\nif &#x5B; &quot;${SWAP_TOTAL_METRIC:-0}&quot; -gt 0 ]; then\n    SWAP_PCT_METRIC=$(\n        awk \\\n            -v used=&quot;${SWAP_USED_METRIC:-0}&quot; \\\n            -v total=&quot;${SWAP_TOTAL_METRIC:-1}&quot; \\\n            'BEGIN {printf &quot;%.0f&quot;, (used\/total)*100}'\n    )\n\n    SWAP_ACTIVITY=$(\n        vmstat 1 2 2&gt;\/dev\/null | \\\n        tail -1 | \\\n        awk '{print $7+$8}'\n    )\n\n    echo &quot;Swap usage    : ${SWAP_PCT_METRIC}%&quot;\n    echo &quot;Swap activity : ${SWAP_ACTIVITY:-0} pages\/s combined si+so&quot;\n\n    if &#x5B; &quot;${SWAP_ACTIVITY:-0}&quot; -gt 0 ]; then\n        echo &quot;WARNING: Active swap-in or swap-out activity detected&quot;\n        free -h\n\n        &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\n    elif &#x5B; &quot;${SWAP_PCT_METRIC:-0}&quot; -gt 50 ]; then\n        echo &quot;INFO: Swap usage is above 50%, but no current swap activity was detected&quot;\n    else\n        echo &quot;OK: Swap usage and activity are within expected limits&quot;\n    fi\nelse\n    echo &quot;INFO: Swap is not configured&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.6 SYSTEM LOAD ---\n\necho &quot;10.6 SYSTEM LOAD&quot;\n\nread -r LOAD_ONE_MIN LOAD_FIVE_MIN LOAD_FIFTEEN_MIN _ &lt; \/proc\/loadavg\n\nCPU_CORES_COUNT=$(\n    nproc 2&gt;\/dev\/null || \\\n    grep -c '^processor' \/proc\/cpuinfo 2&gt;\/dev\/null || \\\n    echo 1\n)\n\nLOAD_PER_CORE=$(\n    awk \\\n        -v load=&quot;${LOAD_ONE_MIN:-0}&quot; \\\n        -v cores=&quot;${CPU_CORES_COUNT:-1}&quot; \\\n        'BEGIN {\n            if (cores &lt; 1) {\n                cores=1\n            }\n            printf &quot;%.2f&quot;, load\/cores\n        }'\n)\n\necho &quot;Load average : ${LOAD_ONE_MIN:-0} ${LOAD_FIVE_MIN:-0} ${LOAD_FIFTEEN_MIN:-0}&quot;\necho &quot;CPU cores    : ${CPU_CORES_COUNT:-1}&quot;\necho &quot;Load\/core    : $LOAD_PER_CORE&quot;\n\nif awk -v value=&quot;$LOAD_PER_CORE&quot; \\\n    'BEGIN {exit !(value &gt;= 1.0)}'\nthen\n    echo &quot;CRITICAL: One-minute load is at or above 1.00 per CPU core&quot;\n    uptime\n\n    OVERALL_STATUS=&quot;CRITICAL&quot;\nelif awk -v value=&quot;$LOAD_PER_CORE&quot; \\\n    'BEGIN {exit !(value &gt;= 0.70)}'\nthen\n    echo &quot;WARNING: One-minute load is at or above 0.70 per CPU core&quot;\n    uptime\n\n    &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\nelse\n    echo &quot;OK: Normalized load is within threshold&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.7 DISK AND FILESYSTEM ERRORS ---\n\necho &quot;10.7 DISK AND FILESYSTEM ERRORS&quot;\n\nif command -v journalctl &gt;\/dev\/null 2&gt;&amp;1; then\n    DISK_ERR_HUNT=$(\n        journalctl \\\n            -k \\\n            -b 0 \\\n            --no-pager \\\n            2&gt;\/dev\/null | \\\n        grep -Ei \\\n            'I\/O error|buffer I\/O|blk_update_request|critical medium error|uncorrectable|EXT4-fs error|XFS.*error|BTRFS.*error|ZFS.*error|nvme.*error|bad sector|read-only file system' | \\\n        tail -15\n    )\nelse\n    DISK_ERR_HUNT=$(\n        dmesg 2&gt;\/dev\/null | \\\n        grep -Ei \\\n            'I\/O error|buffer I\/O|blk_update_request|critical medium error|uncorrectable|EXT4-fs error|XFS.*error|BTRFS.*error|ZFS.*error|nvme.*error|bad sector|read-only file system' | \\\n        tail -15\n    )\nfi\n\nif &#x5B; -n &quot;$DISK_ERR_HUNT&quot; ]; then\n    echo &quot;CRITICAL: Disk or filesystem errors detected:&quot;\n    printf &quot;%s\\n&quot; &quot;$DISK_ERR_HUNT&quot;\n\n    OVERALL_STATUS=&quot;CRITICAL&quot;\nelse\n    echo &quot;OK: No disk or filesystem errors detected in the current boot&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.8 NETWORK ERRORS ---\n\necho &quot;10.8 NETWORK ERRORS&quot;\n\nif command -v journalctl &gt;\/dev\/null 2&gt;&amp;1; then\n    NET_ERR_HUNT=$(\n        journalctl \\\n            -k \\\n            -b 0 \\\n            --no-pager \\\n            2&gt;\/dev\/null | \\\n        grep -Ei \\\n            'link is down|link down|lost carrier|carrier lost|NETDEV WATCHDOG|transmit queue timed out|tx timeout|reset adapter|firmware failed' | \\\n        tail -15\n    )\nelse\n    NET_ERR_HUNT=$(\n        dmesg 2&gt;\/dev\/null | \\\n        grep -Ei \\\n            'link is down|link down|lost carrier|carrier lost|NETDEV WATCHDOG|transmit queue timed out|tx timeout|reset adapter|firmware failed' | \\\n        tail -15\n    )\nfi\n\nif &#x5B; -n &quot;$NET_ERR_HUNT&quot; ]; then\n    echo &quot;WARNING: Network link or adapter errors detected:&quot;\n    printf &quot;%s\\n&quot; &quot;$NET_ERR_HUNT&quot;\n\n    &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\nelse\n    echo &quot;OK: No network link or adapter errors detected in the current boot&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.9 SMART HEALTH ---\n\necho &quot;10.9 SMART HEALTH&quot;\n\nSMART_ERR_FLAG=0\nSMART_UNKNOWN_FLAG=0\nSMART_DEVICE_COUNT=0\n\nif command -v smartctl &gt;\/dev\/null 2&gt;&amp;1; then\n    while IFS= read -r DEV_ID; do\n        &#x5B; -z &quot;$DEV_ID&quot; ] &amp;&amp; continue\n\n        SMART_DEVICE_COUNT=$((SMART_DEVICE_COUNT + 1))\n\n        SMART_OUTPUT=$(\n            smartctl -H &quot;$DEV_ID&quot; 2&gt;\/dev\/null\n        )\n\n        if printf &quot;%s\\n&quot; &quot;$SMART_OUTPUT&quot; | \\\n            grep -Eqi 'PASSED|SMART Health Status: OK|overall-health.*PASSED'\n        then\n            echo &quot;OK: SMART health passed on $DEV_ID&quot;\n        elif printf &quot;%s\\n&quot; &quot;$SMART_OUTPUT&quot; | \\\n            grep -Eqi 'FAILED|BAD|CRITICAL'\n        then\n            echo &quot;CRITICAL: SMART health failure reported on $DEV_ID&quot;\n            printf &quot;%s\\n&quot; &quot;$SMART_OUTPUT&quot;\n\n            SMART_ERR_FLAG=1\n            OVERALL_STATUS=&quot;CRITICAL&quot;\n        else\n            echo &quot;INFO: SMART health could not be determined for $DEV_ID&quot;\n\n            SMART_UNKNOWN_FLAG=1\n        fi\n    done &lt; &lt;(\n        smartctl --scan 2&gt;\/dev\/null | \\\n        awk '{print $1}'\n    )\n\n    if &#x5B; &quot;$SMART_DEVICE_COUNT&quot; -eq 0 ]; then\n        echo &quot;INFO: No SMART-capable devices discovered by smartctl --scan&quot;\n    elif &#x5B; &quot;$SMART_ERR_FLAG&quot; -eq 0 ] &amp;&amp; &#x5B; &quot;$SMART_UNKNOWN_FLAG&quot; -eq 0 ]; then\n        echo &quot;OK: All discovered SMART devices reported healthy&quot;\n    fi\nelse\n    echo &quot;INFO: smartctl is not installed&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.10 ZFS HEALTH ---\n\necho &quot;10.10 ZFS HEALTH&quot;\n\nZFS_HEALTH_STATUS=&quot;NOT INSTALLED&quot;\n\nif command -v zpool &gt;\/dev\/null 2&gt;&amp;1; then\n    ZPOOL_FAULT_MAP=$(\n        zpool status -x 2&gt;\/dev\/null\n    )\n\n    if &#x5B; -z &quot;$ZPOOL_FAULT_MAP&quot; ]; then\n        echo &quot;INFO: No ZFS pools detected&quot;\n        ZFS_HEALTH_STATUS=&quot;NO POOLS&quot;\n    elif printf &quot;%s\\n&quot; &quot;$ZPOOL_FAULT_MAP&quot; | \\\n        grep -qi 'all pools are healthy'\n    then\n        echo &quot;OK: All ZFS pools are healthy&quot;\n        ZFS_HEALTH_STATUS=&quot;OK&quot;\n    else\n        echo &quot;CRITICAL: ZFS pool issue detected:&quot;\n        printf &quot;%s\\n&quot; &quot;$ZPOOL_FAULT_MAP&quot;\n\n        ZFS_HEALTH_STATUS=&quot;CRITICAL&quot;\n        OVERALL_STATUS=&quot;CRITICAL&quot;\n    fi\nelse\n    echo &quot;INFO: ZFS tools are not installed&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.11 MDADM RAID HEALTH ---\n\necho &quot;10.11 MDADM RAID HEALTH&quot;\n\nMDADM_HEALTH_STATUS=&quot;NOT CONFIGURED&quot;\n\nif &#x5B; -r \/proc\/mdstat ] &amp;&amp; grep -q '^md&#x5B;0-9]' \/proc\/mdstat; then\n    MDADM_HEALTH_STATUS=&quot;OK&quot;\n\n    MDADM_PROBLEMS=$(\n        grep -E \\\n            'inactive|recovery|resync|reshape|check|\\&#x5B;&#x5B;U_]*_&#x5B;U_]*\\]' \\\n            \/proc\/mdstat \\\n            2&gt;\/dev\/null\n    )\n\n    if &#x5B; -n &quot;$MDADM_PROBLEMS&quot; ]; then\n        echo &quot;WARNING: mdadm array is degraded, inactive, or running maintenance:&quot;\n        cat \/proc\/mdstat\n\n        MDADM_HEALTH_STATUS=&quot;WARNING&quot;\n\n        &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\n    else\n        echo &quot;OK: Active mdadm arrays appear healthy&quot;\n    fi\nelse\n    echo &quot;INFO: No active mdadm arrays detected&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.12 TIME SYNCHRONIZATION ---\n\necho &quot;10.12 TIME SYNCHRONIZATION&quot;\n\nTIME_SYNC_STATUS=&quot;UNKNOWN&quot;\n\nif command -v timedatectl &gt;\/dev\/null 2&gt;&amp;1; then\n    TIME_SYNC_STATUS=$(\n        timedatectl show \\\n            -p NTPSynchronized \\\n            --value \\\n            2&gt;\/dev\/null\n    )\n\n    if &#x5B; &quot;$TIME_SYNC_STATUS&quot; = &quot;yes&quot; ]; then\n        echo &quot;OK: System clock is synchronized&quot;\n        TIME_SYNC_STATUS=&quot;OK&quot;\n    else\n        echo &quot;WARNING: System clock is not synchronized&quot;\n        timedatectl status 2&gt;\/dev\/null\n\n        TIME_SYNC_STATUS=&quot;WARNING&quot;\n\n        &#x5B; &quot;$OVERALL_STATUS&quot; = &quot;OK&quot; ] &amp;&amp; OVERALL_STATUS=&quot;WARNING&quot;\n    fi\nelse\n    echo &quot;INFO: timedatectl is not available&quot;\nfi\n\nprintf &quot;\\n%.0s&quot; {1..3}\n\n# --- 10.13 SUMMARY ---\n\necho &quot;10.13 SUMMARY&quot;\n\necho &quot;--- Core Global Infrastructure Health Matrix ---&quot;\n\nprintf &quot;Platform Node Instance...%s\\n&quot; \\\n    &quot;$(hostname 2&gt;\/dev\/null || echo unresolved)&quot;\n\nif &#x5B; &quot;${FAILED_SERVICES_COUNT:-0}&quot; -eq 0 ]; then\n    echo &quot;Systemd Services..........OK&quot;\nelse\n    echo &quot;Systemd Services..........CRITICAL ($FAILED_SERVICES_COUNT failed)&quot;\nfi\n\nif &#x5B; -z &quot;$FS_OVER_LIMIT&quot; ]; then\n    echo &quot;Filesystem Capacity.......OK&quot;\nelse\n    echo &quot;Filesystem Capacity.......WARNING&quot;\nfi\n\nif &#x5B; -z &quot;$INODE_OVER_LIMIT&quot; ]; then\n    echo &quot;Inode Capacity............OK&quot;\nelse\n    echo &quot;Inode Capacity............WARNING&quot;\nfi\n\nif &#x5B; -z &quot;$DISK_ERR_HUNT&quot; ]; then\n    echo &quot;Kernel Disk Health........OK&quot;\nelse\n    echo &quot;Kernel Disk Health........CRITICAL&quot;\nfi\n\nif &#x5B; -z &quot;$NET_ERR_HUNT&quot; ]; then\n    echo &quot;Network Link Health.......OK&quot;\nelse\n    echo &quot;Network Link Health.......WARNING&quot;\nfi\n\necho &quot;ZFS Health................$ZFS_HEALTH_STATUS&quot;\necho &quot;mdadm Health..............$MDADM_HEALTH_STATUS&quot;\necho &quot;Time Synchronization......$TIME_SYNC_STATUS&quot;\necho &quot;Normalized Load\/Core......$LOAD_PER_CORE&quot;\necho &quot;Overall Health............$OVERALL_STATUS&quot;\n<\/pre><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"1024\" src=\"https:\/\/itgen.itbumper.com\/wp-content\/uploads\/2026\/07\/010_debian_health_check-01-584x1024.png\" alt=\"\" class=\"wp-image-1223\" style=\"width:800px\" srcset=\"https:\/\/itgen.itbumper.com\/wp-content\/uploads\/2026\/07\/010_debian_health_check-01-584x1024.png 584w, https:\/\/itgen.itbumper.com\/wp-content\/uploads\/2026\/07\/010_debian_health_check-01-171x300.png 171w, https:\/\/itgen.itbumper.com\/wp-content\/uploads\/2026\/07\/010_debian_health_check-01.png 722w\" sizes=\"(max-width: 584px) 85vw, 584px\" \/><\/figure><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[],"tags":[],"_links":{"self":[{"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=\/wp\/v2\/pages\/1219"}],"collection":[{"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1219"}],"version-history":[{"count":4,"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=\/wp\/v2\/pages\/1219\/revisions"}],"predecessor-version":[{"id":1224,"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=\/wp\/v2\/pages\/1219\/revisions\/1224"}],"wp:attachment":[{"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itgen.itbumper.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}