aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/scripts/backup-inventories.sh
blob: 642d71def36f514666d42d1a6b06eacb3f66e103 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

# Figure out where we are, most of this mess is to troll through soft links.
PRG="$0"
while [ -h "${PRG}" ] ; do
  ls=$(ls -ld "${PRG}")
  link=`expr "${ls}" : '.*-> \(.*\)$'`
  if expr "${link}" : '.*/.*' > /dev/null; then
    PRG="${link}"
  else
    PRG=$(dirname "${PRG}")/"${link}"
  fi
done
PRGDIR=$(dirname "${PRG}")
pushd ${PRGDIR} >/dev/null
PRGDIR=$(pwd)
popd >/dev/null

# Get the database credentials.
declare -A creds
while read -d ';' p; do
  k=$(echo ${p} | cut -d '=' -f 1)
  v=$(echo ${p} | cut -d '=' -f 2)
  creds[${k}]="${v}"
done < <(grep ConnectionString ${PRGDIR}/../config/config.ini | cut -d '"' -f 2)
# The above seems the best way to get bash to let the creds assignments survive outside the loop.

# Only backup those that have not logged on since their last backup, but returning prims from sims will bypass this check.
timestamp=$(ls -o --time-style="+%s" ${PRGDIR}/../backups/.keep | cut -d ' ' -f 5)
touch ${PRGDIR}/../backups/.keep

# Get the user names, and back 'em up.
mysql --host="${creds[Data Source]}" "${creds[Database]}" --user="${creds[User ID]}" --password="${creds[Password]}" \
  -e "select FirstName,LastName from UserAccounts,GridUser where UserAccounts.PrincipalID=GridUser.UserID and GridUser.Logout>${timestamp};" -ss | while read user; do
  # Replace tab with space
  user=${user//	/ }
  ${PRGDIR}/backup-inventory "${user}"
  # Sleep for a while, so that there is plenty of time to do the backup,
  # and we are not keeping the computer very busy if there are lots of users.
  # My big arsed 1 GB OAR takes about ten minutes to create, and maybe an hour to gitIOR!
  sleep 200
done