This repository has been archived by the owner on Aug 22, 2020. It is now read-only.
forked from Yuffster/CircleMUD
-
Notifications
You must be signed in to change notification settings - Fork 0
/
autorun
executable file
·166 lines (142 loc) · 4.49 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
#!/bin/sh
#
# CircleMUD 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.
#
# The port on which to run the MUD
PORT=4000
# 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
dts:0:death trap
rip:0:killed
restarts:0:Running
levels:0:advanced
rentgone:0:equipment lost
usage:0:usage
newplayers:0:new player
errors:0:SYSERR
godcmds:0:(GC)
badpws:0:Bad PW
'
# 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
declare -i newlog=$BACKLOGS+1
else
declare -i newlog=1
while [ -s log/syslog.$newlog ]; do newlog=$newlog+1; done
fi
# Rotate the logs.
declare -i y=2
while [ $y -lt $newlog ]; do
declare -i x=$y-1
mv -f log/syslog.$y log/syslog.$x
y=$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.
bin/circle $FLAGS $PORT >> syslog 2>&1
if [ -r .killscript ]; then
DATE=`date`;
echo "autoscript killed $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
proc_syslog
sleep 5
done