Posted on Leave a comment

Python Script Example for System Administrators

Here’s a Python script to monitor disk usage on a system and send an email alert if the usage exceeds a threshold.

import psutil
import smtplib
from email.mime.text import MIMEText

# Set threshold for disk usage (in %)
threshold = 80

# Get disk usage statistics using psutil
disk_usage = psutil.disk_usage('/')

# Check if usage exceeds threshold
if disk_usage.percent >= threshold:
    # Send email alert
    msg = MIMEText("Disk usage on the system has exceeded {}%.".format(threshold))
    msg['Subject'] = "Disk Usage Alert"
    msg['From'] = "system-admin@example.com"
    msg['To'] = "admin@example.com"

    s = smtplib.SMTP('localhost')
    s.send_message(msg)
    s.quit()

This script uses the psutil library to retrieve disk usage statistics, and the smtplib library to send an email via the local SMTP server. The MIMEText class from the email library is used to construct the email message.

Here’s another example of a Python script for system administrators, this one logs system performance statistics to a file:

import time
import psutil

# Set the log file path
log_file = "/var/log/system_stats.log"

# Open the log file for writing
with open(log_file, "a") as f:
    while True:
        # Get system performance statistics using psutil
        cpu_percent = psutil.cpu_percent(interval=1)
        memory_usage = psutil.virtual_memory().percent
        disk_io_counters = psutil.disk_io_counters()
        network_io_counters = psutil.net_io_counters()
        
        # Write the statistics to the log file
        f.write("{}: CPU: {}%, Memory: {}%, Disk Reads: {}, Disk Writes: {}, Network Sent: {}, Network Received: {}\n".format(
            time.strftime("%Y-%m-%d %H:%M:%S"),
            cpu_percent,
            memory_usage,
            disk_io_counters.read_count,
            disk_io_counters.write_count,
            network_io_counters.bytes_sent,
            network_io_counters.bytes_recv
        ))
        f.flush()
        
        # Sleep for 1 minute before getting the next set of statistics
        time.sleep(60)

This script uses the psutil library to retrieve system performance statistics and logs them to a file at regular intervals. The statistics logged include CPU usage, memory usage, disk I/O, and network I/O. The time library is used to format the current time and to add a sleep between logging intervals.

Here’s another example of a Python script for system administrators, this one is a script to monitor the availability of a remote website:

import requests
import smtplib
from email.mime.text import MIMEText

# Set the URL to monitor
url = "https://www.example.com"

# Set the email addresses for sending the alert
from_address = "system-admin@example.com"
to_address = "admin@example.com"

while True:
    try:
        # Make a request to the URL
        response = requests.get(url, timeout=10)
        
        # Check if the response is successful (status code 200)
        if response.status_code != 200:
            raise Exception("Website returned a non-200 status code: {}".format(response.status_code))
    except Exception as e:
        # If the request fails, send an email alert
        msg = MIMEText("The website {} is down. Error: {}".format(url, str(e)))
        msg['Subject'] = "Website Down Alert"
        msg['From'] = from_address
        msg['To'] = to_address

        s = smtplib.SMTP('localhost')
        s.send_message(msg)
        s.quit()
        
    # Sleep for 1 minute before checking the website again
    time.sleep(60)

This script uses the requests library to make a request to a specified URL and check if the response is successful. If the request fails or the response status code is not 200, the script sends an email alert via the local SMTP server, indicating that the website is down. The time library is used to add a sleep between checks.

Here’s another example of a Python script for system administrators, this one is a script to monitor the uptime of a remote server:

import paramiko
import smtplib
from email.mime.text import MIMEText

# Set the server information
server_hostname = "example.com"
server_username = "admin"
server_password = "secret"

# Set the email addresses for sending the alert
from_address = "system-admin@example.com"
to_address = "admin@example.com"

while True:
    try:
        # Connect to the remote server using SSH
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(server_hostname, username=server_username, password=server_password)
        
        # Execute the uptime command on the remote server
        stdin, stdout, stderr = ssh.exec_command("uptime")
        
        # Read the output of the command
        uptime = stdout.read().strip().decode("utf-8")
        
        # Check if the uptime is less than 10 minutes
        if "min" in uptime and int(uptime.split(" ")[-2].strip(",")) < 10:
            raise Exception("Uptime is less than 10 minutes: {}".format(uptime))
    except Exception as e:
        # If the connection fails or the uptime is less than 10 minutes, send an email alert
        msg = MIMEText("The server {} is down. Error: {}".format(server_hostname, str(e)))
        msg['Subject'] = "Server Down Alert"
        msg['From'] = from_address
        msg['To'] = to_address

        s = smtplib.SMTP('localhost')
        s.send_message(msg)
        s.quit()
        
    # Sleep for 1 minute before checking the server again
    time.sleep(60)

This script uses the paramiko library to connect to a remote server via SSH and execute the uptime command. The output of the command is parsed to check if the uptime is less than 10 minutes. If the connection fails or the uptime is less than 10 minutes, an email alert is sent via the local SMTP server, indicating that the server is down. The time library is used to add a sleep between checks.

Leave a Reply

Your email address will not be published. Required fields are marked *