jcoffey-dev 9be14e9670 Stop log_rotate destroying logs that are still in use
Two problems, both data loss.

It gzipped any *.log older than the threshold. gzip writes the .gz and
unlinks the original, so a daemon holding that file open keeps writing
to an unlinked inode and those writes become unreachable -- the exact
failure real logrotate avoids with copytruncate or a postrotate signal.
We can do neither from here, so files currently held open are now
skipped and left for logrotate, and the run says so. If lsof is missing
the check cannot run, and that is reported rather than assumed safe.

It also deleted every .gz older than a hardcoded 90 days, on every run,
with no flag, no dry-run and no confirmation -- destroying archives on
any host with longer retention. Deletion is now opt-in via --purge-days,
prints what it will remove, and needs an interactive confirmation or
--yes. Without a tty and without --yes it refuses instead of proceeding.

Adds --dry-run, --days, -h, and set -euo pipefail. A bare numeric first
argument still works, so existing `log_rotate.sh 14` callers and cron
entries are unaffected.

Verified against a fixture directory: old logs compressed and recent
ones left alone, archives surviving when --purge-days is absent, purge
refusing non-interactively without --yes, and a file held open by a
running process skipped rather than compressed.
2026-08-22 22:12:31 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:21 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:49 -07:00
2025-06-12 16:03:33 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:49 -07:00
2025-05-17 10:06:49 -07:00

Linux System Administration Scripts

Automate routine tasks: This project provides a collection of Bash scripts to automate common Linux system administration duties. Automating daily sysadmin tasks improves efficiency and consistency by reducing manual repetition and the risk of human error. Each script is designed to be distribution-agnostic, using only standard base utilities (e.g. rsync, tar, awk, grep, netstat/ss, systemctl) available on most Linux systems. All scripts are released under the GNU GPL v3.0 license and include usage information in their headers.

Included Scripts

  • backup.sh Backup Utility: Archive directories into compressed tarballs for backups.
  • restore.sh Restore Utility: Restore files from backup archives.
  • disk_cleanup.sh Disk Usage & Cleanup: Report disk usage and identify large files; optionally clean package caches and temporary files to free space.
  • log_inspect.sh Log Inspection: Search within log files or tail the latest system logs for troubleshooting.
  • log_rotate.sh Log Rotation: Compress and rotate old log files to prevent excessive disk usage
  • network_info.sh Network & Firewall Info: Show network interface details, routing table, open listening ports, and basic firewall (iptables) rules.
  • process_monitor.sh Process Management: List top resource-consuming processes and allow termination of processes by name or PID.
  • security_audit.sh Security Audit: Scan for security issues like world-writable files, SUID/SGID executables, and open network ports.
  • service_manager.sh Service Management: Start, stop, restart, or check status of system services, and enable/disable services at boot.
  • sys_monitor.sh System Monitoring: Display system uptime, resource utilization (CPU, memory, disk), and top processes.
  • update_system.sh System Updates: Apply available package updates and patches (works with apt, yum/dnf, zypper, pacman).
  • user_manage.sh User and Group Management: Create or remove user accounts and groups, modify user group memberships, and lock/unlock accounts.
  • zimbra_backup.sh - Create a backup for a zimbra mailbox.
  • zimbra_restore.sh - Restore a backup for a zimbra mailbox.
  • rsync_magic.sh - A smart Bash script that wraps rsync for safe, flexible, and efficient file synchronization and backups.
S
Description
Imported from github.com during the 2026-09-20 standup (local dir: SysAdminAutomation)
Readme GPL-3.0
109 KiB
Languages
Shell 100%