diff options
author | David Walter Seikel | 2011-12-12 19:24:18 +1000 |
---|---|---|
committer | David Walter Seikel | 2011-12-12 19:24:18 +1000 |
commit | 85ae70d895f784632e4a6041024034dbe692dac8 (patch) | |
tree | c61a01ca61cfebd8d000e724046d46ae71902319 /start-sim | |
parent | Use 0.0.0.0 as the default internal region IP, but stick with the externally ... (diff) | |
download | IGnoble-85ae70d895f784632e4a6041024034dbe692dac8.zip IGnoble-85ae70d895f784632e4a6041024034dbe692dac8.tar.gz IGnoble-85ae70d895f784632e4a6041024034dbe692dac8.tar.bz2 IGnoble-85ae70d895f784632e4a6041024034dbe692dac8.tar.xz |
Convert to using tmux, though the old screen stuff is still there.
Diffstat (limited to '')
-rwxr-xr-x | start-sim | 58 | ||||
-rwxr-xr-x | start-sim-screen | 96 |
2 files changed, 127 insertions, 27 deletions
@@ -2,8 +2,9 @@ | |||
2 | 2 | ||
3 | USER=$(whoami) | 3 | USER=$(whoami) |
4 | console_name="OpenSim_console" | 4 | console_name="OpenSim_console" |
5 | screen_session=opensim/${console_name} | 5 | screen_command="tmux -S /var/run/opensim/opensim-tmux.socket" |
6 | screen_check="screen -ls opensim/" | 6 | screen_session=${console_name} |
7 | screen_window="${screen_command} select-window -t ${screen_session}" | ||
7 | osversion="current" | 8 | osversion="current" |
8 | bindir=/opt/opensim/${osversion}/bin | 9 | bindir=/opt/opensim/${osversion}/bin |
9 | quiet="" | 10 | quiet="" |
@@ -30,67 +31,70 @@ if [ "x$tgt" = "x" ]; then | |||
30 | exit 1 | 31 | exit 1 |
31 | fi | 32 | fi |
32 | 33 | ||
33 | if [ $USER = "opensim" ] | ||
34 | then | ||
35 | SUDO="" | ||
36 | else | ||
37 | SUDO="sudo -Hu opensim" | ||
38 | fi | ||
39 | |||
40 | # Would be nice if this worked. | 34 | # Would be nice if this worked. |
41 | export MONO_PATH=${bindir} | 35 | export MONO_PATH=${bindir} |
42 | # Then we would not have to do this, and subsequently write all over the damn bin directory. | 36 | # Then we would not have to do this, and subsequently write all over the damn bin directory. |
43 | cd ${bindir} | 37 | cd ${bindir} |
44 | 38 | ||
45 | if ($screen_check | grep -q ${console_name}); then | 39 | if ( ${screen_command} -q list-sessions 2>/dev/null | grep -q ${console_name}: ); then |
46 | true | 40 | true |
47 | else | 41 | else |
48 | $SUDO screen -d -m -S ${console_name} | 42 | if [ $USER = "opensim" ] |
43 | then | ||
44 | SUDO="" | ||
45 | else | ||
46 | SUDO="sudo -Hu opensim" | ||
47 | fi | ||
48 | # The sudo is only so that the session is owned by opensim, otherwise it's owned by whoewer ran this script, which is a likely security hole. | ||
49 | # After the session is created, we rely on the /var/run/opensim directory to be group sticky, so that anyone in the opensim group can attach to the tmux socket. | ||
50 | $SUDO ${screen_command} new-session -d -s ${console_name} | ||
49 | fi | 51 | fi |
50 | 52 | ||
53 | inidir=/opt/opensim/config/${tgt} | ||
54 | |||
51 | if [ "x$tgt" = "xrobust" ]; then | 55 | if [ "x$tgt" = "xrobust" ]; then |
52 | exe="Robust" | 56 | exe="Robust" |
57 | title="ROBUST" | ||
58 | roboini="-inifile=${inidir}/Robust.ini" | ||
53 | else | 59 | else |
54 | exe="OpenSim" | 60 | exe="OpenSim" |
61 | # Grab the first line of the sim.ini file, it should be the sim name in square brackets. | ||
62 | title=$(head -n 1 ${inidir}/Regions/sim.ini ) | ||
63 | # Strip off spaces at either end. | ||
64 | shopt -s extglob | ||
65 | title=${title##*( )} | ||
66 | title=${title%%*( )} | ||
67 | shopt -u extglob | ||
68 | # Strip off the square brackets at either end. | ||
69 | title=${title:1:$(( ${#title} - 2 ))} | ||
55 | fi | 70 | fi |
56 | 71 | ||
57 | inidir=/opt/opensim/config/${tgt} | ||
58 | # Grab the first line of the sim.ini file, it should be the sim name in square brackets. | ||
59 | title=$(head -n 1 ${inidir}/Regions/sim.ini ) | ||
60 | # Strip off spaces at either end. | ||
61 | shopt -s extglob | ||
62 | title=${title##*( )} | ||
63 | title=${title%%*( )} | ||
64 | shopt -u extglob | ||
65 | # Strip off the square brackets at either end. | ||
66 | title=${title:1:$(( ${#title} - 2 ))} | ||
67 | |||
68 | case $(basename $0) in | 72 | case $(basename $0) in |
69 | "start-sim") | 73 | "start-sim") |
70 | cmd="/usr/bin/mono ${bindir}/${exe}.exe -inidirectory=${inidir} -logconfig=${inidir}/${exe}.exe.config" | 74 | cmd="/usr/bin/mono ${bindir}/${exe}.exe -inidirectory=${inidir} -logconfig=${inidir}/${exe}.exe.config ${roboini}" |
71 | 75 | ||
72 | # Check if it's already running. | 76 | # Check if it's already running. |
73 | if [ ! -e /var/run/opensim/${tgt}.pid ] | 77 | if [ ! -e /var/run/opensim/${tgt}.pid ] |
74 | then | 78 | then |
75 | $SUDO screen -r ${screen_session} -p "-" -X screen -t "[${title}]" ${cmd} | 79 | ${screen_command} new-window -dn "[${title}]" -t "${screen_session}" "${cmd}" |
76 | fi | 80 | fi |
77 | ;& | 81 | ;& |
78 | 82 | ||
79 | "sim-console") | 83 | "sim-console") |
80 | if [ "x$quiet" = "x" ] | 84 | if [ "x$quiet" = "x" ] |
81 | then | 85 | then |
82 | screen -r ${screen_session} -p "[${title}]" -A | 86 | ${screen_window}:"[${title}]" \; attach-session -t "${screen_session}" |
83 | fi | 87 | fi |
84 | ;; | 88 | ;; |
85 | 89 | ||
86 | "backup-sim") | 90 | "backup-sim") |
87 | # Substitute underscores for spaces in the title, then add the full date and time to create the OAR file name. | 91 | # Substitute underscores for spaces in the title, then add the full date and time to create the OAR file name. |
88 | cmd="save oar ${inidir}/../../backups/${title// /_}-$(date '+%F_%T').oar" | 92 | cmd="save oar ${inidir}/../../backups/${title// /_}-$(date '+%F_%T').oar" |
89 | $SUDO screen -r opensim/OpenSim_console -p "[${title}]" -X stuff "${cmd}$(/bin/echo -ne '\015')" | 93 | ${screen_window}:"[${title}]" \; send-keys "${cmd}" Enter |
90 | ;; | 94 | ;; |
91 | 95 | ||
92 | "stop-sim") | 96 | "stop-sim") |
93 | $SUDO screen -r opensim/OpenSim_console -p "[${title}]" -X stuff "shutdown$(/bin/echo -ne '\015')" | 97 | ${screen_window}:"[${title}]" \; send-keys "shutdown" Enter |
94 | ;; | 98 | ;; |
95 | esac | 99 | esac |
96 | 100 | ||
diff --git a/start-sim-screen b/start-sim-screen new file mode 100755 index 0000000..12c8f8f --- /dev/null +++ b/start-sim-screen | |||
@@ -0,0 +1,96 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | USER=$(whoami) | ||
4 | console_name="OpenSim_console" | ||
5 | screen_session=opensim/${console_name} | ||
6 | screen_check="screen -ls opensim/" | ||
7 | osversion="current" | ||
8 | bindir=/opt/opensim/${osversion}/bin | ||
9 | quiet="" | ||
10 | |||
11 | if [ "$1" = "-q" ] | ||
12 | then | ||
13 | quiet="true" | ||
14 | shift 1 | ||
15 | fi | ||
16 | |||
17 | if [ "x$1" = "x" ]; then | ||
18 | pathname=$(pwd) | ||
19 | tgt=$(basename $pathname) | ||
20 | elif [ -d "./$1" ]; then | ||
21 | tgt=$1 | ||
22 | elif [ -d "./sim$1" ]; then | ||
23 | tgt=sim$1 | ||
24 | fi | ||
25 | |||
26 | if [ "x$tgt" = "x" ]; then | ||
27 | echo "usage:" | ||
28 | echo " $ $(basename $0) <sim>" | ||
29 | echo "where <sim> is one of: " robust sim[0-9][0-9] | ||
30 | exit 1 | ||
31 | fi | ||
32 | |||
33 | if [ $USER = "opensim" ] | ||
34 | then | ||
35 | SUDO="" | ||
36 | else | ||
37 | SUDO="sudo -Hu opensim" | ||
38 | fi | ||
39 | |||
40 | # Would be nice if this worked. | ||
41 | export MONO_PATH=${bindir} | ||
42 | # Then we would not have to do this, and subsequently write all over the damn bin directory. | ||
43 | cd ${bindir} | ||
44 | |||
45 | if ($screen_check | grep -q ${console_name}); then | ||
46 | true | ||
47 | else | ||
48 | $SUDO screen -d -m -S ${console_name} | ||
49 | fi | ||
50 | |||
51 | if [ "x$tgt" = "xrobust" ]; then | ||
52 | exe="Robust" | ||
53 | else | ||
54 | exe="OpenSim" | ||
55 | fi | ||
56 | |||
57 | inidir=/opt/opensim/config/${tgt} | ||
58 | # Grab the first line of the sim.ini file, it should be the sim name in square brackets. | ||
59 | title=$(head -n 1 ${inidir}/Regions/sim.ini ) | ||
60 | # Strip off spaces at either end. | ||
61 | shopt -s extglob | ||
62 | title=${title##*( )} | ||
63 | title=${title%%*( )} | ||
64 | shopt -u extglob | ||
65 | # Strip off the square brackets at either end. | ||
66 | title=${title:1:$(( ${#title} - 2 ))} | ||
67 | |||
68 | case $(basename $0) in | ||
69 | "start-sim") | ||
70 | cmd="/usr/bin/mono ${bindir}/${exe}.exe -inidirectory=${inidir} -logconfig=${inidir}/${exe}.exe.config" | ||
71 | |||
72 | # Check if it's already running. | ||
73 | if [ ! -e /var/run/opensim/${tgt}.pid ] | ||
74 | then | ||
75 | $SUDO screen -r ${screen_session} -p "-" -X screen -t "[${title}]" ${cmd} | ||
76 | fi | ||
77 | ;& | ||
78 | |||
79 | "sim-console") | ||
80 | if [ "x$quiet" = "x" ] | ||
81 | then | ||
82 | screen -r ${screen_session} -p "[${title}]" -A | ||
83 | fi | ||
84 | ;; | ||
85 | |||
86 | "backup-sim") | ||
87 | # Substitute underscores for spaces in the title, then add the full date and time to create the OAR file name. | ||
88 | cmd="save oar ${inidir}/../../backups/${title// /_}-$(date '+%F_%T').oar" | ||
89 | $SUDO screen -r opensim/OpenSim_console -p "[${title}]" -X stuff "${cmd}$(/bin/echo -ne '\015')" | ||
90 | ;; | ||
91 | |||
92 | "stop-sim") | ||
93 | $SUDO screen -r opensim/OpenSim_console -p "[${title}]" -X stuff "shutdown$(/bin/echo -ne '\015')" | ||
94 | ;; | ||
95 | esac | ||
96 | |||