mirror of
https://github.com/myvesta/vesta
synced 2025-08-20 05:14:10 -07:00
Add cron job for disk usage snapshot
This commit is contained in:
parent
0a1df66a16
commit
457e5c862e
5 changed files with 151 additions and 0 deletions
102
bin/v-df-snapshot-diff
Normal file
102
bin/v-df-snapshot-diff
Normal file
|
@ -0,0 +1,102 @@
|
|||
#!/bin/bash
|
||||
# info: Make a diff between two snapshots of the disk usage
|
||||
# options: FILE1 FILE2
|
||||
|
||||
whoami=$(whoami)
|
||||
if [ "$whoami" != "root" ]; then
|
||||
echo "You must be root to execute this script"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Let's declare three associative arrays
|
||||
declare -A FILE1
|
||||
declare -A FILE2
|
||||
declare -A FILED
|
||||
|
||||
file1=$1
|
||||
file2=$2
|
||||
|
||||
if [[ ! "$file1" =~ ^/usr/local/vesta/data/df/snapshot-.*\.txt$ ]]; then
|
||||
file1="/usr/local/vesta/data/df/$file1"
|
||||
fi
|
||||
|
||||
if [[ ! "$file2" =~ ^/usr/local/vesta/data/df/snapshot-.*\.txt$ ]]; then
|
||||
file2="/usr/local/vesta/data/df/$file2"
|
||||
fi
|
||||
|
||||
if [ ! -f "$file1" ]; then
|
||||
echo "File $file1 not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$file2" ]; then
|
||||
echo "File $file2 not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
timestamp=$(date +%Y-%m-%d-%H-%M-%S)
|
||||
mkdir -p /usr/local/vesta/data/df-diff
|
||||
file0="/usr/local/vesta/data/df-diff/diff-$timestamp.txt"
|
||||
file0s="/usr/local/vesta/data/df-diff/diff-size-sorted-$timestamp.txt"
|
||||
file0f="/usr/local/vesta/data/df-diff/diff-folder-sorted-$timestamp.txt"
|
||||
touch $file0
|
||||
|
||||
# Let's load the first file and fill the array FILE1
|
||||
while IFS=$'\t' read SIZE DIRECTORY; do
|
||||
# Skip blank lines or lines that are not in the correct format
|
||||
[[ -z "$DIRECTORY" ]] && continue
|
||||
[[ "$DIRECTORY" = "total" ]] && continue
|
||||
# Insert values into the array
|
||||
FILE1["$DIRECTORY"]="$SIZE"
|
||||
done < "$file1"
|
||||
|
||||
# Let's load the second file and fill the array FILE2
|
||||
while IFS=$'\t' read SIZE DIRECTORY; do
|
||||
# Skip blank lines or lines that are not in the correct format
|
||||
[[ -z "$DIRECTORY" ]] && continue
|
||||
[[ "$DIRECTORY" = "total" ]] && continue
|
||||
# Insert values into the array
|
||||
FILE2["$DIRECTORY"]="$SIZE"
|
||||
done < "$file2"
|
||||
|
||||
# We iterate through FILE1 and look for the matching key in FILE2
|
||||
for k in "${!FILE1[@]}"; do
|
||||
if [[ -v FILE2["$k"] ]]; then
|
||||
# If there is the same folder (KEY) in FILE2
|
||||
DIFF=$(( ${FILE2[$k]} - ${FILE1[$k]} ))
|
||||
FILED["$k"]=$DIFF
|
||||
echo -e "${DIFF}\t${k}" >> $file0
|
||||
else
|
||||
# If the folder (KEY) is not found in FILE2
|
||||
FILED["$k"]=${FILE1["$k"]}
|
||||
echo -e "${FILE1["$k"]}\t${k}" >> $file0
|
||||
fi
|
||||
done
|
||||
|
||||
# sorted by size
|
||||
sort -nr -k1,1 $file0 > $file0s
|
||||
|
||||
# sorted by folders
|
||||
while IFS=$'\t' read SIZE DIRECTORY; do
|
||||
[[ -z "$DIRECTORY" ]] && continue
|
||||
[[ "$DIRECTORY" = "total" ]] && continue
|
||||
echo -e "$DIRECTORY\t${FILED["$DIRECTORY"]}" >> $file0f
|
||||
done < "$file2"
|
||||
|
||||
chmod 600 $file0 $file0s $file0f
|
||||
chown root:root $file0 $file0s $file0f
|
||||
|
||||
echo "Done."
|
||||
echo "You can do:"
|
||||
echo "mcview $file0"
|
||||
echo "mcview $file0s"
|
||||
echo "mcview $file0f"
|
||||
echo "--------------------------------"
|
||||
echo "Here is the first 30 lines of the diff, sorted by size (descending, in MB):"
|
||||
head -n 30 $file0s
|
||||
echo "--------------------------------"
|
||||
echo "Here is the first 30 lines of the diff, sorted by folders (in MB):"
|
||||
head -n 30 $file0f
|
||||
echo "--------------------------------"
|
||||
|
||||
exit 0
|
11
bin/v-df-snapshot-logs-cleaner
Normal file
11
bin/v-df-snapshot-logs-cleaner
Normal file
|
@ -0,0 +1,11 @@
|
|||
#!/bin/bash
|
||||
# info: Clean up old snapshots of the disk usage
|
||||
# options: NONE
|
||||
|
||||
folder="/usr/local/vesta/data/df"
|
||||
mkdir -p $folder
|
||||
find $folder -type f -mtime +30 -delete
|
||||
|
||||
folder="/usr/local/vesta/data/df-diff"
|
||||
mkdir -p $folder
|
||||
find $folder -type f -mtime +30 -delete
|
20
bin/v-df-snapshot-make
Normal file
20
bin/v-df-snapshot-make
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
# info: Make a snapshot of the disk usage
|
||||
# options: NONE
|
||||
|
||||
folder="/usr/local/vesta/data/df"
|
||||
|
||||
mkdir -p $folder
|
||||
timestamp=$(date +%Y-%m-%d-%H-%M-%S)
|
||||
du --max-depth=1 -c -m -x / > $folder/snapshot-$timestamp.txt
|
||||
du --max-depth=1 -c -m -x /home >> $folder/snapshot-$timestamp.txt
|
||||
du --max-depth=2 -c -m -x /home >> $folder/snapshot-$timestamp.txt
|
||||
du --max-depth=3 -c -m -x /home >> $folder/snapshot-$timestamp.txt
|
||||
du --max-depth=6 -c -m -x /home >> $folder/snapshot-$timestamp.txt
|
||||
du --max-depth=1 -c -m -x /var/lib/mysql >> $folder/snapshot-$timestamp.txt
|
||||
du --max-depth=1 -c -m -x /var/log >> $folder/snapshot-$timestamp.txt
|
||||
|
||||
chmod 600 $folder/snapshot-$timestamp.txt
|
||||
chown root:root $folder/snapshot-$timestamp.txt
|
||||
|
||||
exit 0
|
|
@ -1896,6 +1896,10 @@ command="sudo $VESTA/bin/v-update-sys-rrd"
|
|||
$VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command"
|
||||
command="sudo $VESTA/bin/v-fix-website-permissions-for-all-websites-only-php"
|
||||
$VESTA/bin/v-add-cron-job 'admin' '05' '03' '*' '*' '*' "$command"
|
||||
command="sudo $VESTA/bin/v-df-snapshot-make"
|
||||
$VESTA/bin/v-add-cron-job 'admin' '05' '04' '*' '*' '*' "$command"
|
||||
command="sudo $VESTA/bin/v-df-snapshot-logs-cleaner"
|
||||
$VESTA/bin/v-add-cron-job 'admin' '10' '04' '*' '*' '*' "$command"
|
||||
systemctl restart cron.service
|
||||
|
||||
echo "== Building inititall rrd images"
|
||||
|
|
|
@ -38,6 +38,20 @@ if grep -q "fix-website-permissions-for-all-websites" /usr/local/vesta/data/user
|
|||
fi
|
||||
fi
|
||||
|
||||
# Adding cron job for disk usage snapshot
|
||||
if ! grep -q "v-df-snapshot-make" /usr/local/vesta/data/users/admin/cron.conf; then
|
||||
echo "== Adding cron job for disk usage snapshot"
|
||||
command="sudo $VESTA/bin/v-df-snapshot-make"
|
||||
$VESTA/bin/v-add-cron-job 'admin' '05' '04' '*' '*' '*' "$command"
|
||||
systemctl restart cron.service
|
||||
fi
|
||||
if ! grep -q "v-df-snapshot-logs-cleaner" /usr/local/vesta/data/users/admin/cron.conf; then
|
||||
echo "== Adding cron job for disk usage snapshot logs cleaner"
|
||||
command="sudo $VESTA/bin/v-df-snapshot-logs-cleaner"
|
||||
$VESTA/bin/v-add-cron-job 'admin' '10' '04' '*' '*' '*' "$command"
|
||||
systemctl restart cron.service
|
||||
fi
|
||||
|
||||
# Fixing PHP and .env permissions and ownership for all websites
|
||||
if ! grep -q "fix-website-permissions-for-all-websites-only-php" /usr/local/vesta/data/users/admin/cron.conf; then
|
||||
echo "== Fixing PHP and .env permissions and ownership for all websites"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue