forked from moshehbenavraham/LuminariMUD
-
Notifications
You must be signed in to change notification settings - Fork 1
/
autorun
178 lines (151 loc) · 4.78 KB
/
autorun
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/bin/sh
#
# CircleMUD 3.0 autorun script
# Contributions by Fred Merkel, Stuart Lamble, and Jeremy Elson
# New log rotating code contributed by Peter Ajamian
# Copyright (c) 1996 The Trustees of The Johns Hopkins University
# All Rights Reserved
# See license.doc for more information
#
#############################################################################
#
# This script can be used to run CircleMUD over and over again (i.e., have it
# automatically reboot if it crashes). It will run the game, and copy some
# of the more useful information from the system logs to the 'log' directory
# for safe keeping.
#
# You can control the operation of this script by creating and deleting files
# in Circle's root directory, either manually or by using the 'shutdown'
# command from within the MUD.
#
# Creating a file called .fastboot makes the script wait only 5 seconds
# between reboot attempts instead of the usual 60. If you want a quick
# reboot, use the "shutdown reboot" command from within the MUD.
#
# Creating a file called .killscript makes the script terminate (i.e., stop
# rebooting the MUD). If you want to shut down the MUD and make it stay
# shut down, use the "shutdown die" command from within the MUD.
#
# Finally, if a file called pause exists, the script will not reboot the MUD
# again until pause is removed. This is useful if you want to turn the MUD
# off for a couple of minutes and then bring it back up without killing the
# script. Type "shutdown pause" from within the MUD to activate this feature.
#
# This line was causing errors, so I commented it out -Zusuk
#ulimit -c unlimited
# The port on which to run the MUD
PORT=4100
# Default flags to pass to the MUD server (see admin.txt for a description
# of all flags).
FLAGS='-q'
# Number of syslog.# files to keep in the log directory.
BACKLOGS=6
# Each record in the following variable contains information for one log file.
# The fields are filename:maxlines:pattern where filename is the name of the
# log file, maxlines is the maximum number of lines in the file (0 for
# unlimited) and pattern is a pattern which must be matched for a line to get
# copied from syslog to this log file.
LOGFILES='
delete:0:self-delete
delete:0:PCLEAN
dts:0:death trap
rip:0:killed
restarts:0:Running
levels:0:advanced
rentgone:0:equipment lost
usage:5000:usage
newplayers:0:new player
errors:5000:SYSERR
godcmds:0:(GC)
badpws:0:Bad PW
olc:5000:OLC
help:0:get help on
trigger:5000:trigger
'
# The following is the number of lines in syslog.CRASH. Set to 0 to disable
# crashlogs.
LEN_CRASHLOG=30
#############################################################################
#############
# Functions #
#############
# The proc_syslog function will grep the logs for the various different info
# and rotate the logs in the log directory.
proc_syslog () {
# Return if there's no syslog
if ! [ -s syslog ]; then return; fi
# Create the crashlog
if [ -n "$LEN_CRASHLOG" -a "$LEN_CRASHLOG" -gt 0 ]; then
tail -n $LEN_CRASHLOG syslog > syslog.CRASH
fi
# Append to the specialty logfiles and truncate to maximum length if
# applicable
OLD_IFS=$IFS
IFS='
'
for rec in $LOGFILES; do
name=log/`echo $rec|cut -f 1 -d:`
len=`echo $rec|cut -f 2 -d:`
pattern=`echo $rec|cut -f 3- -d:`
fgrep $pattern syslog >> $name
if [ $len -gt 0 ]; then
temp=`mktemp $name.XXXXXX`
tail -n $len $name > $temp
mv -f $temp $name
fi
done
IFS=$OLD_IFS
# Find the # to set the new log file to.
if [ -s log/syslog.$BACKLOGS ]; then
newlog=$(expr $BACKLOGS + 1)
else
newlog=1
while [ -s log/syslog.$newlog ]; do newlog=$(expr $newlog + 1); done
fi
# Rotate the logs.
y=2
while [ $y -lt $newlog ]; do
x=$(expr $y - 1)
mv -f log/syslog.$y log/syslog.$x
y=$(expr $y + 1)
done
mv -f syslog log/syslog.$newlog
}
########
# Main #
########
# Check to see if there is a syslog which would indicate that autorun
# was improperly killed (ie maybe the system was rebooted or ?).
if [ -s syslog ]; then
echo Improper shutdown of autorun detected, rotating syslogs before startup. >> syslog
proc_syslog
fi
# The main loop
while ( : ) do
DATE=`date`
echo "autorun starting game $DATE" > syslog
echo "running bin/circle $FLAGS $PORT" >> syslog
# On Cygwin, you may need to precede this next line with './' for
# './bin/circle' as the command.
nohup bin/circle $FLAGS $PORT >> syslog 2>&1
if [ -r .killscript ]; then
DATE=`date`;
echo "autoscript terminated $DATE" >> syslog
rm .killscript
proc_syslog
exit
fi
# if [ ! -r .fastboot ]; then
# sleep 60
# else
# rm .fastboot
# fi
while [ -r pause ]; do
sleep 60
done
if [ -s lib/core ]; then
gdb bin/circle lib/core -command gdb.tmp >lib/backtrace.$(date +%d.%m.%Y.%T)
fi
proc_syslog
sleep 5
done