70 lines
2.4 KiB
Bash
Executable File
70 lines
2.4 KiB
Bash
Executable File
#!/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
|
|
|