2 # this is a collection of scripts that assist in managing an opensim server.
3 # it uses the "screen" utility to manage opensimulator instances.
5 source "$FEISTY_MEOW_SCRIPTS/core/functions.sh"
7 # set up some parameters that we believe (or have been told) are beneficial.
8 export MONO_THREADS_PER_CPU=408
10 # we run the processes with a little cpu de-prioritization. we do not want
11 # them taking over completely if there's a runaway mono tornado.
12 export NICENESS_LEVEL=6
14 # a tip that supposedly helps on linux so that there won't be bizarre
15 # problems compiling scripts.
18 # this is used as a process startup snooze, to avoid running a dependent
19 # process before the dependency has really started.
22 # lock the limit in for threads, so we don't have any getting out of control.
23 # also make sure we've provided enough space for each thread.
26 # use more recent versions of mono for opensim if they're available.
27 if [ -d /opt/mono-2.10/bin ]; then
28 export PATH=/opt/mono-2.10/bin:$PATH
29 elif [ -d /opt/mono-2.8/bin ]; then
30 # use version 2.8 mono for opensim if it's available.
31 export PATH=/opt/mono-2.8/bin:$PATH
34 function launch_screen()
36 screen_name="$1"; shift
38 echo "$(date_stringer ' '): starting $screen_name now..."
39 screen -L -S "$screen_name" -d -m nice -n $NICENESS_LEVEL mono "$app_name"
42 echo "$(date_stringer ' '): $screen_name started."
46 # finds the opensim process specified or returns a blank string in the
47 # OS_PROC_ID variable.
49 function find_opensim_process()
52 process_name="$1"; shift
53 if [ -z "$process_name" ]; then
54 return 1 # failure in call.
56 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)
59 # takes a screen name for the detached screen session and a process name that
60 # we should be able to find running. we make sure that both are shut down.
61 function close_application()
63 screen_name="$1"; shift
64 process_name="$1"; shift
65 echo "$(date_stringer ' '): stopping $screen_name now..."
66 screen -r -s "$screen_name" -X quit
68 # we don't want to shut any other servers down until this process is really gone.
69 find_opensim_process $process_name
70 if [ ! -z "$OS_PROC_ID" ]; then
71 echo "$(date_stringer ' '): waiting for $screen_name to really shut down..."
73 # check again after the snooze.
74 find_opensim_process $process_name
75 while [ ! -z "$OS_PROC_ID" ]; do
76 find_opensim_process $process_name
77 #break out on timed basis.
79 echo "$(date_stringer ' '): $screen_name really is shut down now."
81 #do this as last ditch, above in timeout
82 find_opensim_process $process_name
83 if [ ! -z "$OS_PROC_ID" ]; then
84 echo "process for $screen_name still exists, killing $process_name (id $OS_PROC_ID) now."
91 echo "$(date_stringer ' '): $screen_name stopped."