Merge branch 'master' of zooty:feisty_meow
[feisty_meow.git] / scripts / opensim / opensim_utils.sh
1 #!/bin/bash
2 # this is a collection of scripts that assist in managing an opensim server.
3 # it uses the "screen" utility to manage opensimulator instances.
4
5 # set up some parameters that we believe (or have been told) are beneficial.
6 export MONO_THREADS_PER_CPU=408
7
8 # we run the processes with a little cpu de-prioritization.  we do not want
9 # them taking over completely if there's a runaway mono tornado.
10 export NICENESS_LEVEL=6
11
12 # a tip that supposedly helps on linux so that there won't be bizarre
13 # problems compiling scripts.
14 export LANG=C
15
16 # this is used as a process startup snooze, to avoid running a dependent
17 # process before the dependency has really started.
18 export SNOOZE_TIME=7
19
20 # lock the limit in for threads, so we don't have any getting out of control.
21 # also make sure we've provided enough space for each thread.
22 ulimit -s 262144
23
24 # use more recent versions of mono for opensim if they're available.
25 if [ -d /opt/mono-2.10/bin ]; then
26   export PATH=/opt/mono-2.10/bin:$PATH
27 elif [ -d /opt/mono-2.8/bin ]; then
28   # use version 2.8 mono for opensim if it's available.
29   export PATH=/opt/mono-2.8/bin:$PATH
30 fi
31
32 function launch_screen()
33 {
34   screen_name="$1"; shift
35   app_name="$1"; shift
36   echo "$(mdate): starting $screen_name now..."
37   screen -L -S "$screen_name" -d -m nice -n $NICENESS_LEVEL mono --debug "$app_name" 
38 #-console=basic 
39   echo "$(mdate): $screen_name started."
40   sleep $SNOOZE_TIME
41 }
42
43 # finds the opensim process specified or returns a blank string in the
44 # OS_PROC_ID variable.
45 export OS_PROC_ID=
46 function find_opensim_process()
47 {
48   OS_PROC_ID=
49   process_name="$1"; shift
50   if [ -z "$process_name" ]; then
51     return 1  # failure in call.
52   fi
53   OS_PROC_ID=$(ps wuax | grep "[0-9] mono $process_name" | grep -vi screen | sed -e "s/$USER  *\([0-9][0-9]*\).*/\1/" | head -n 1)
54 }
55
56 # takes a screen name for the detached screen session and a process name that
57 # we should be able to find running.  we make sure that both are shut down.
58 function close_application()
59 {
60   screen_name="$1"; shift
61   process_name="$1"; shift
62   echo "$(mdate): stopping $screen_name now..."
63   screen -r -s "$screen_name" -X quit
64
65   # we don't want to shut any other servers down until this process is really gone.
66   find_opensim_process $process_name
67   if [ ! -z "$OS_PROC_ID" ]; then
68     echo "$(mdate): waiting for $screen_name to really shut down..."
69     sleep $SNOOZE_TIME
70     # check again after the snooze.
71     find_opensim_process $process_name
72     while [ ! -z "$OS_PROC_ID" ]; do
73       find_opensim_process $process_name
74 #break out on timed basis.
75     done
76     echo "$(mdate): $screen_name really is shut down now."
77
78 #do this as last ditch, above in timeout
79     find_opensim_process $process_name
80     if [ ! -z "$OS_PROC_ID" ]; then
81       echo "process for $screen_name still exists, killing $process_name (id $OS_PROC_ID) now."
82       kill -9 $OS_PROC_ID
83       sleep 2
84     fi
85
86   fi
87
88   echo "$(mdate): $screen_name stopped."
89 }
90