Projektowanie stron internetowych i usługi IT

|

Every system needs its own.

POLIGON

IT Mechanization: From Routine to Automation with Bash, Python, and Cron

How to professionally implement service task automation – scripts, scheduling, alerts, security, and best practices.

Introduction

In modern IT, nobody wants to repeat the same manual tasks over and over—whether you’re running production systems, test environments, or your own home lab. Mechanization, meaning script-based automation of tasks, is the foundation of security, efficiency, and predictability. In this article, you’ll find real-life automation examples with Bash, Python, and scheduling tools (cron), integration with notifications (e-mail, Slack), and practical tips about security, version control, and script documentation.

Bash/Python automation scheme

1. Why Automate IT Service Tasks?

  • Minimize errors – every routine is a potential mistake. Scripts don’t forget.
  • Save time – manual repetition drains time and energy.
  • 📅 Regularity and predictability – tasks run on a schedule, automatically.
  • 🔔 Fast notifications – alerts about failures, full disks, or finished backups come straight to you.
  • 🕵️ Central audit trail – every operation leaves a (log) trace, making accountability and troubleshooting easy.
  • 💸 Cost optimization – better resource management, automatic cleanup, fast reaction to incidents.

2. Bash: The Core of Linux Automation

2.1. Log rotation and archiving (logrotate “on steroids”)

#!/bin/bash
LOG_DIR="/var/log/nginx"
ARCHIVE_DIR="/var/archive/logs"
mkdir -p "$ARCHIVE_DIR"
find "$LOG_DIR" -name '*.log' -mtime +7 -exec mv {} "$ARCHIVE_DIR" \;
tar czf "$ARCHIVE_DIR/logs-$(date +%F).tar.gz" -C "$ARCHIVE_DIR" .
find "$ARCHIVE_DIR" -type f -mtime +30 -delete
echo "Logs archived $(date)" | mail -s "Log Archiving OK" admin@company.com

2.2. Automatic updates + rollback on failure

#!/bin/bash
set -euo pipefail
apt update
apt -y upgrade && apt -y autoremove
if [ $? -eq 0 ]; then
    echo "Update completed: $(date)" | mail -s "Update OK" admin@company.com
else
    cp /var/log/apt/history.log "/root/apt-fail-$(date +%F-%H%M).log"
    echo "Update error" | mail -s "Update ERROR" admin@company.com
fi

2.3. Fast system stats “one-liner” (for CRON)

echo "$(date): $(hostname) | Uptime: $(uptime | cut -d',' -f1) | RAM: $(free -h | awk '/Mem:/ {print $3"/"$2}') | Disk: $(df -h / | tail -1 | awk '{print $4"/"$2}')" \
| mail -s "Daily System Health" admin@company.com

2.4. Example: Automatic cleanup of the temp directory

#!/bin/bash
find /tmp -type f -mtime +5 -delete
find /tmp -type d -empty -delete
echo "Cleanup of /tmp done: $(date)" >> /var/log/tmp-clean.log

3. Python: Monitoring, APIs, and Next-Level Notifications

3.1. Notifications to Slack, Teams, Discord

import requests, socket
def send_slack(msg):
    url = "https://hooks.slack.com/services/TOKEN"
    data = {"text": msg}
    requests.post(url, json=data)
percent = 90
if percent > 80:
    send_slack(f"⚠️ {socket.gethostname()} exceeded {percent}% disk usage!")

3.2. Quick health-check of services with alert (e-mail/Slack)

import smtplib, subprocess, socket
SENDER = "server@company.com"
RECIP = "admin@company.com"
for service in ["sshd", "nginx", "mysql"]:
    status = subprocess.getoutput(f"systemctl is-active {service}")
    if status != "active":
        msg = f"🔴 {service} on {socket.gethostname()} status: {status}"
        # Send e-mail notification
        with smtplib.SMTP('localhost') as s:
            s.sendmail(SENDER, RECIP, f"Subject:Alert: {service}\n\n{msg}")

3.3. Resource usage report (CPU, RAM, DISK) – Slack, Teams, E-mail

import psutil, requests, socket
hostname = socket.gethostname()
cpu = psutil.cpu_percent()
ram = psutil.virtual_memory().percent
disk = psutil.disk_usage("/").percent
msg = f"{hostname} | CPU: {cpu}%, RAM: {ram}%, Disk: {disk}%"
requests.post("https://hooks.slack.com/services/TOKEN", json={"text": msg})

4. Task Scheduling (CRON and Beyond)

Most IT automation relies on precise scheduling. The most common tool is cron, but it’s worth knowing other tools like systemd timers (precise dependencies, better logging) or Anacron (for systems not online 24/7).

4.1. Example crontab entries

# Daily DB backup at 1:00
0 1 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
# Health-check of services every Monday at 6:00
0 6 * * 1 python3 /opt/scripts/healthcheck.py
# Log rotation at midnight
0 0 * * * /opt/scripts/logrotate.sh
# /tmp cleanup twice daily
0 6,18 * * * /opt/scripts/tmp-clean.sh
💡 Tip: Use MAILTO=admin@company.com at the top of crontab to have every cron output delivered directly to your e-mail.

4.2. Preventing parallel runs (lockfile, flock)

0 * * * * flock -n /tmp/myjob.lock /opt/scripts/cron-task.sh

This prevents multiple script instances from running at once—crucial for backups, imports, and synchronizations.

5. Reporting & Integrations: E-mail, Slack, Syslog, Grafana, Teams

  • 📧 E-mail: The simplest and most universal—for regular reports, alerts, daily summaries.
  • 💬 Slack/Webhook/Teams/Discord: Fast notifications, integration with monitoring (Zabbix, Grafana, Wazuh).
  • 📚 Central syslog (rsyslog, remote syslog): All events go to a single log base, making analysis and auditing easier (ELK stack, Grafana Loki, etc).
  • 📊 Dashboards: Automatically pushing data to APIs (e.g., Prometheus Pushgateway, Grafana Loki, custom webhooks) for full visualization.
i Always test notification (webhook) and logging integrations before going live. Check authorization and data format!

6. IT Scripting Best Practices

  • 📁 Choose a single directory for scripts (/opt/scripts or /srv/scripts).
  • 🗒️ Add headers: date, author, version, description, parameter list.
  • 🔒 Permissions 700 (owner only!), restrict access to logs and backups.
  • ⛑️ Run Bash with set -euo pipefail—catch errors early.
  • 🛡️ Scripts run as root—ALWAYS test in a dev/test environment before production.
  • 🔄 Use GIT for versioning (protect against uncontrolled changes, easy rollbacks).
  • 📖 Add a README.md with instructions to every script folder—even a short one!
  • 💡 Establish error reporting standards (mail, Slack, syslog)—never allow “silent” failures.
  • 📤 Store logs centrally, not as scattered files on every server.
! Warning: Never run untested scripts in production. Testing, backups, and code review are your daily duties!

7. Real-Life Automation Scenarios

7.1. Automatic Backup and Reporting

  • Database backups (MySQL, PostgreSQL, MSSQL)—periodic dumps, compression, copying to offsite/NAS/S3.
  • E-mail report after each backup with summary of size and status.

7.2. Resource Usage Monitoring

  • Script checking disk/RAM/CPU across many hosts and sending a report to Slack or a dashboard (e.g., Grafana).
  • Alerts on threshold breaches (e.g., >90% disk, >80% RAM, load avg > 4).

7.3. “Self-Healing” Automation—Service Recovery

  • If systemctl is-active nginx returns “inactive”—auto restart + notification.
  • Python + Slack version: a script checks every 10 min, restarts and reports.
import subprocess, requests
for service in ["nginx", "php7.4-fpm"]:
    status = subprocess.getoutput(f"systemctl is-active {service}")
    if status != "active":
        subprocess.run(["systemctl", "restart", service])
        requests.post("https://hooks.slack.com/services/TOKEN",
                      json={"text": f"{service} restarted!"})

FAQ: IT Automation in Practice

How do I add a Slack notification to an existing script?

Import requests in Python and add requests.post(WEBHOOK_URL, json={"text": "Message"}) after the main script action.

How do I send cron logs to email?

Add MAILTO="admin@company.com" at the top of crontab or redirect stdout/stderr to an email/sending script.

How do I prevent concurrent script runs from CRON?

Use flock or a simple lockfile, e.g. flock -n /tmp/my.lock /opt/scripts/my.sh—prevents two copies running at once.

How to safely test scripts run as root?

Always start in a test environment. Add set -euo pipefail to Bash, use exception handling in Python. Backup config files first!

Can I automate tasks in Windows?

Yes—use PowerShell + Task Scheduler, or external tools like Jenkins/Ansible. For notifications: Send-MailMessage (email), webhooks for Slack/Teams.

Summary

Task mechanization in IT is not just convenience and time-saving. It’s a higher level of security, predictability, and infrastructure resilience. Well-designed scripts, schedules, versioning, fast notifications, and a culture of testing and documenting—these let you master even very large production environments. Start with simple scripts—but think long-term: document, test, version. Automation never gets old!

Strategic Partners

type help
Terminal
$
Switch language