Logwatch
①Install
# dnf -y install logwatch
②Edit configuration file
# cat /usr/share/logwatch/default.conf/logwatch.conf >> /etc/logwatch/conf/logwatch.conf
# vi /etc/logwatch/conf/logwatch.conf
Line 51 : Comment
#MailTo = root
Line 52 : Add
MailTo = [mail address]
Per Line 84 : Set the level of detail for log notifications
#Detail = Low
Detail = High
③Output Logwatch reports
# logwatch --output stdout
It will appear as follows
################### Logwatch 7.5.5 (01/22/21) ####################
Processing Initiated: Fri Jul 3 15:24:25 2026
Date Range Processed: yesterday
( 2026-Jul-02 )
Period is day.
Detail Level of Output: 10
Type of Output/Format: stdout / text
Logfiles for Host: Lepard
##################################################################
--------------------- Kernel Audit Begin ------------------------
Number of audit daemon starts: 1
Number of audit initializations: 1
**Unmatched Entries**
auditd[760]: audit dispatcher initialized with q_depth=2000 and 1 active plugins: 1 Time(s)
---------------------- Kernel Audit End -------------------------
------------------------------------------(Omitted)---------------------------------------------------
--------------------- Disk Space Begin ------------------------
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/almalinux-root 36G 7.1G 28G 21% /
/dev/nvme0n1p1 960M 462M 499M 49% /boot
---------------------- Disk Space End -------------------------
--------------------- lm_sensors output Begin ------------------------
No sensors found!
Make sure you loaded all the kernel drivers you need.
Try sensors-detect to find out which these are.
---------------------- lm_sensors output End -------------------------
###################### Logwatch End #########################
④Test to see if the report arrives at the address you set. Check if you receive a log report email like the one above.
# /etc/cron.daily/0logwatch
DNS Update
Whenever the internet connection is lost or the router reboots, causing the global IP address to change, you must access the dynamic DNS service to notify it of the IP address change.
Create a dedicated Python file and schedule it for regular execution via Cron.
This time, it's about DNS settings on Valudomain.
# cd /var/www/system
# vi ddnsset.py
Contents of ddnset.py
#setddns.py
import requests
import ipaddress
from datetime import datetime
from pathlib import Path
# SETTING DATA
MY_DOMAIN = "example.jp" ←Self-hosted domain
MY_PASS = "xxxxxxxxxx" ←Password
MY_HOSTNAME = "xxxx" ←Hostname
OUT_FILE = Path("/tmp/ipadress") ←IP Address Log File
def time_msg():
now = datetime.now()
return now.strftime("%Y/%m/%d %H:%M:%S")
def is_valid_ip(ip_str):
try:
ipaddress.ip_address(ip_str)
return True
except ValueError:
return False
def main():
# Check Global IP Address
url_get_ip = "https://dyn.value-domain.com/cgi-bin/dyn.fcg?ip"
try:
response = requests.get(url_get_ip, timeout=10)
response.raise_for_status()
current_ip = response.text.strip()
except requests.RequestException as e:
print(f"{time_msg()} Failed to get IP: {e}")
return
# IP check
mssg = time_msg()
if not current_ip:
print(f"{mssg} invalid IP NULL")
return
if not is_valid_ip(current_ip):
print(f"{mssg} invalid IP={current_ip}")
return
# Read previous IP
previous_ip = ""
if OUT_FILE.exists():
with open(OUT_FILE, "r") as f:
previous_ip = f.read().strip()
if current_ip == previous_ip:
print(f"{time_msg()} no change IP={current_ip}")
return
else:
print(f"change IP from {previous_ip} to {current_ip}")
# Update DDNS
mssg = time_msg()
print(f"{mssg} access to value-domain")
url_set_ddns = (
f"https://dyn.value-domain.com/cgi-bin/dyn.fcg?"
f"d={MY_DOMAIN}&p={MY_PASS}&h={MY_HOSTNAME}"
)
try:
response = requests.get(url_set_ddns, timeout=10)
response.raise_for_status()
# Convert line breaks to spaces, and merge consecutive spaces into a single space
result = ' '.join(response.text.strip().split())
except requests.RequestException as e:
print(f"{time_msg()} Failed to update DDNS: {e}")
return
mssg = time_msg()
print(f"{mssg} {MY_HOSTNAME}.{MY_DOMAIN} {result} IP={current_ip}")
# Save the IP address only if the DDNS update is successful
if "status=0" in result:
with open(OUT_FILE, "w") as f:
f.write(current_ip)
print(f"{mssg} Successfully saved new IP: {current_ip}")
else:
print(f"{mssg} DDNS update failed, IP not saved")
if __name__ == "__main__":
main()
IP Address Log File Creation
# touch /tmp/ipadress
Run periodically
# crontab -e
* 00 * * * /usr/bin/python3 /var/www/system/ddnsset.py >> /var/log/ddns_updater.log 2>&1
Introduce disk usage check script
1. Script Creation
# cd /var/www/system
# vi disk_capacity_check.sh
Contents of disk_capacity_check.sh
#!/bin/bash
#Designation of e-mail address to be notified
MAIL="<your mailaddress>"
DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'`
if [ $DVAL -gt 80 ]; then
echo "Disk usage alert: $DVAL %" | mail -s "Disk Space Alert in `hostname`" $MAIL
fi
# chmod 700 disk_capacity_check.sh
2. Execution Confirmation
①Check current usage rates
# df -h
It appears as follows
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 725M 9.4M 716M 2% /run
/dev/mapper/almalinux-root 36G 7.1G 28G 21% /
/dev/loop0 128K 128K 0 100% /var/lib/snapd/snap/hello-world/29
/dev/nvme0n1p1 960M 462M 499M 49% /boot
/dev/loop3 74M 74M 0 100% /var/lib/snapd/snap/certbot/5603
/dev/loop1 50M 50M 0 100% /var/lib/snapd/snap/snapd/26865
/dev/loop2 106M 106M 0 100% /var/lib/snapd/snap/core/17292
/dev/loop4 67M 67M 0 100% /var/lib/snapd/snap/core24/1643
tmpfs 363M 8.0K 363M 1% /run/user/1000
②Create a dummy file to achieve at least 80% utilization(In the example, a file named dummyfile with a size of about 25GB)
# dd if=/dev/zero of=dummyfile bs=1M count=25000
③check again
Verify that it is at least 80% by performing the following:
# df -h
④Run check scripts
# /var/www/system/disk_capacity_check.sh
You will receive an email to the email address you have set up, stating something like "Disk usage alert: 90 %".
⑤Delete "dummyfile"
# rm dummyfile
⑥Periodic Execution Setting
# crontab -e
Add the following
30 2 * * * /var/www/system/disk_capacity_check.sh
