diff --git a/misc/clean-lxcs.sh b/misc/clean-lxcs.sh new file mode 100644 index 00000000..bc7ce5c0 --- /dev/null +++ b/misc/clean-lxcs.sh @@ -0,0 +1,70 @@ +#!/bin/bash +function header_info { + cat <<"EOF" + ________ __ _ ________ + / ____/ /__ ____ _____ / / | |/ / ____/ + / / / / _ \/ __ `/ __ \ / / | / / +/ /___/ / __/ /_/ / / / / / /___/ / /___ +\____/_/\___/\__,_/_/ /_/ /_____/_/|_\____/ + +EOF +} +set -e +YW=$(echo "\033[33m") +BL=$(echo "\033[36m") +RD=$(echo "\033[01;31m") +CM='\xE2\x9C\x94\033' +GN=$(echo "\033[1;92m") +CL=$(echo "\033[m") +clear +header_info +while true; do + read -p "This Will Clean logs, cache and update apt lists on all LXC Containers. Proceed(y/n)?" yn + case $yn in + [Yy]*) break ;; + [Nn]*) exit ;; + *) echo "Please answer yes or no." ;; + esac +done +clear +containers=$(pct list | tail -n +2 | cut -f1 -d' ') + +function clean_container() { + container=$1 + clear + header_info + echo -e "${BL}[Info]${GN} Cleaning${BL} $container${CL} \n" + pct exec $container -- bash -c "apt-get -y autoremove && apt-get -y autoclean && rm -rf /var/{cache,log}/* /var/lib/apt/lists/* && apt-get update" +} +read -p "Skip stopped containers? " -n 1 -r +echo +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + skip=no +else + skip=yes +fi + +for container in $containers; do + status=$(pct status $container) + if [ "$skip" == "no" ]; then + if [ "$status" == "status: stopped" ]; then + echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL} \n" + pct start $container + echo -e "${BL}[Info]${GN} Waiting For${BL} $container${CL}${GN} To Start ${CL} \n" + sleep 5 + clean_container $container + echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n" + pct shutdown $container & + elif [ "$status" == "status: running" ]; then + clean_container $container + fi + fi + if [ "$skip" == "yes" ]; then + if [ "$status" == "status: running" ]; then + clean_container $container + fi + fi +done +wait + +echo -e "${GN} Finished, All Containers Cleaned. ${CL} \n"