Magellan Linux

Annotation of /mcore-src/trunk/mcore-tools/src/modules/citrix/storefront-cron.in

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2697 - (hide annotations) (download)
Wed Dec 16 13:50:20 2015 UTC (8 years, 5 months ago) by niro
File size: 3700 byte(s)
-use lock files to prevent race-conditions of the cronjobs
1 niro 2511 #!/bin/bash
2    
3     MCORE_LIBDIR="@@MCORE_LIBDIR@@"
4     source @@SYSCONFDIR@@/mcore/mcore.conf
5 niro 2514 source @@SYSCONFDIR@@/mcore/citrix.conf
6 niro 2524 source @@SYSCONFDIR@@/mcore/citrix-enumerate.conf
7 niro 2521 source @@SYSCONFDIR@@/mcore/control.conf
8 niro 2511 source ${MCORE_LIBDIR}/include/common.global.class
9 niro 2515 source ${MCORE_LIBDIR}/include/daemon.global.class
10 niro 2514 source ${MCORE_LIBDIR}/include/mysqlfunctions.global.class
11 niro 2511
12 niro 2514 : ${STOREFRONT_STORE=""}
13     : ${STOREFRONT_USER=""}
14     : ${STOREFRONT_PASS=""}
15     : ${STOREFRONT_DOMAIN=""}
16 niro 2511
17 niro 2522 export IMPORTED_IDS=""
18    
19 niro 2697 LOCKFILE="@@RUNDIR@@/lock/storefront-cron.lock"
20    
21 niro 2522 is_not_an_import_id()
22     {
23     local id="$1"
24     local entry
25    
26     for entry in ${IMPORTED_IDS}
27     do
28     if [[ ${entry} = ${id} ]]
29     then
30     return 1
31     fi
32     done
33    
34     return 0
35     }
36    
37 niro 2697 # the lockfile is not meant to be perfect, it's just in case the
38     # two cron scripts get run close to each other to keep
39     # them from stepping on each other's toes.
40     [[ -f ${LOCKFILE} ]] && exit 0
41    
42     trap "{ rm -f ${LOCKFILE}; exit 0; }" EXIT
43     touch ${LOCKFILE}
44    
45 niro 2524 # get default settings from configs
46     [[ -z ${STOREFRONT_STORE} ]] && export STOREFRONT_STORE="${DEFAULT_STOREFRONT_STORE}"
47     [[ -z ${STOREFRONT_USER} ]] && export STOREFRONT_USER="${MCORE_STOREFRONT_USER}"
48     [[ -z ${STOREFRONT_PASS} ]] && export STOREFRONT_PASS="${MCORE_STOREFRONT_PASS}"
49     [[ -z ${STOREFRONT_DOMAIN} ]] && export STOREFRONT_DOMAIN="${MCORE_STOREFRONT_DOMAIN}"
50 niro 2511
51 niro 2517 if ! storebrowse &> /dev/null
52 niro 2511 then
53 niro 2514 if [ -d ~/.ICAClient ]
54 niro 2511 then
55 niro 2516 rm -r ~/.ICAClient
56 niro 2511 fi
57    
58 niro 2514 install -d ~/.ICAClient
59     touch ~/.ICAClient/.eula_accepted
60    
61 niro 2511 # kill running instances
62 niro 2517 pidof AuthManagerDaemon > /dev/null && killall AuthManagerDaemon
63 niro 2511 pidof ServiceRecord > /dev/null && killall ServiceRecord
64     pidof storebrowse > /dev/null && killall storebrowse
65    
66 niro 2514 # register eula and add default store
67 niro 2522 xvfb-run -a -s "-extension RANDR" storebrowse -a "${STOREFRONT_STORE}" > /dev/null
68 niro 2511 fi
69    
70 niro 2514 # get all sessions
71     if [[ -z $(storebrowse -l | grep -i ${STOREFRONT_STORE}) ]]
72     then
73     echo "Store ${STOREFRONT_STORE} unknown, perhaps not added. Run 'rm -r ~/.ICAClient'."
74     else
75     OPT=""
76 niro 2517 [[ -n ${STOREFRONT_USER} ]] && OPT+=" -U ${STOREFRONT_USER}"
77     [[ -n ${STOREFRONT_PASS} ]] && OPT+=" -P ${STOREFRONT_PASS}"
78     [[ -n ${STOREFRONT_DOMAIN} ]] && OPT+=" -D ${STOREFRONT_DOMAIN}"
79 niro 2522 SESSION_LIST=$(storebrowse -E ${OPT} ${STOREFRONT_STORE} 2> /dev/null)
80 niro 2521 if [[ $? != 0 ]]
81     then
82     echo "could not retrieve session list"
83     exit 1
84     fi
85 niro 2518
86     # exclude the desktop session, which is always the first
87     declare -i counter=0
88 niro 2522 while read line
89 niro 2518 do
90     if [[ ${counter} -gt 0 ]]
91     then
92     session=$(echo ${line} | cut -d"'" -f 2)
93     description=$(echo ${line} | cut -d"'" -f 4)
94 niro 2525 decho "Session: '${session}' -> Description '${description}'"
95 niro 2521
96     # import or update db entry
97 niro 2522 id=$(mysqldo "select id from values_storefront_session where session='${session}';")
98     if [[ -z ${id} ]]
99     then
100 niro 2641 mysqldo "insert into values_storefront_session (session,description,store,enabled) values('${session}','${description}','${STOREFRONT_STORE}','1');"
101 niro 2522 else
102 niro 2641 mysqldo "update values_storefront_session set session='${session}',description='${description}',store='${STOREFRONT_STORE}',enabled='1' where id='${id}';"
103 niro 2522 fi
104 niro 2521
105     # get and save id
106     id=$(mysqldo "select id from values_storefront_session where session='${session}';")
107 niro 2522 export IMPORTED_IDS+=" ${id}"
108 niro 2518 fi
109     (( counter++ ))
110 niro 2522 done << EOF
111     $(echo "${SESSION_LIST}")
112     EOF
113 niro 2521
114     # now disable all other ids in the database
115 niro 2522 DATABASE_IDS=$(mysqldo "select id from values_storefront_session")
116     for id in ${DATABASE_IDS}
117     do
118     if is_not_an_import_id "${id}"
119     then
120     # disable this one, not imported=not existing on the storefront-server in the moment
121     mysqldo "update values_storefront_session set enabled='0' where id='${id}';"
122     fi
123     done
124 niro 2514 fi
125 niro 2697
126     exit 0