#!/bin/bash # ============================================================================= # Script Name: lxc_list_sed.sh # Version: 1.10 # Description: This script lists all LXC containers, checks their statuses, and # updates the SENDMAILTO field in /etc/logcheck/logcheck.conf for # running containers. It includes error handling and logging. # ============================================================================= # 01 Required commands REQUIRED_CMDS=("lxc-ls" "lxc-info" "lxc-attach" "lxc-start") # 02 Check if required commands are available for CMD in "${REQUIRED_CMDS[@]}"; do if ! command -v $CMD &> /dev/null; then echo "Command $CMD is not installed. Please install it and try again." exit 1 fi done # 03 Function to check if a container is running is_container_running() { local CONTAINER=$1 if lxc-info -n "$CONTAINER" | grep -q 'RUNNING'; then echo "$CONTAINER is running." return 0 # Container is running else echo "$CONTAINER is not running or does not exist." return 1 # Container is not running fi } # 04 List all running Linux containers list_running_containers() { local CONTAINERS=($(lxc-ls -f | awk '$2 == "RUNNING" {print $1}')) echo ${CONTAINERS[@]} } # 05 Update SENDMAILTO in /etc/logcheck/logcheck.conf for running LXC containers update_sendmailto() { local NEW_EMAIL="logcheck+srvlogz@bubuit.net" local RUNNING_CONTAINERS=($@) # Get the list of running containers as arguments for CONTAINER in "${RUNNING_CONTAINERS[@]}"; do echo "Attempting to update SENDMAILTO in $CONTAINER" if lxc-attach -n "$CONTAINER" -- bash -c "[ -f /etc/logcheck/logcheck.conf ]"; then if lxc-attach -n "$CONTAINER" -- bash -c "sed -i 's/^SENDMAILTO.*/SENDMAILTO=\"$NEW_EMAIL\"/' /etc/logcheck/logcheck.conf"; then echo "Successfully updated SENDMAILTO in $CONTAINER" else echo "Failed to update SENDMAILTO in $CONTAINER" fi else echo "/etc/logcheck/logcheck.conf does not exist in $CONTAINER" fi sleep 1 # Introduce a sleep to avoid running too fast done } # 06 Main script execution RUNNING_CONTAINERS=$(list_running_containers) echo -e "\nRunning Containers: ${RUNNING_CONTAINERS[@]}" echo -ne "\n" if [ -n "$RUNNING_CONTAINERS" ]; then update_sendmailto ${RUNNING_CONTAINERS[@]} else echo "No running containers found." fi