I normally just use a crontab job setup under the mud account you want to use.
Say you have an account called dawn to run the mud under.
Login as dawn.
mkdir bin (to create ~/bin)
cd bin (change into the bin dir)
create a bootmud.pl file based on the one shown below in the bin dir.
crontab -e (to edit your crontab)
*/5 * * * * ~/bin/bootmud.pl (add this line in the editor then exit)
That above line in your crontab, will run the bootmud.pl script every 5 minutes... if the mud is down it will automatically be rebooted.
Below is the bootmud.pl script, you will need to change the port number and directories.
- Kalahn
Developer of the Dawn of Time Codebase.
http://www.dawnoftime.org/
cat ~/bin/bootmud.pl
#!/usr/bin/perl
#########################################################################
# bootdawn.pl Version 1.1 #
# Created: Jun 28, 1997 Kalahn@dawnoftime #
# Last Modified: 18 March 2001 http://www.dawnoftime.org/ #
#########################################################################
# README
#
# This is a pretty simple script that checks to see if a mud is running #
# properly. Be sure to change the 'important vars' section. The best #
# idea is to run this script from cron every couple of minutes... That #
# way you can be sure that it stays running.
#
# You probably should stop using startup as a script and delete it.
# Here's how to do it...
#
# 1) Make sure to edit the bootdawn.pl file and insert your values at
# the top.
#
# 2) Edit your crontab file, type crontab -e, it's a vi editor.
#
# 3) Put the following line as your crontab script:
#
# */8 * * * * /home/dawn/bin/bootdawn.pl
#
# 4) Make sure to change the directory in the above line as needed.
#
#########################################################################
# CHANGES AND HISTORY #
# #
# v 1.0, Jun 28, 1997 Written by Jared Proudfoot #
# <jproudfo@footprints.net> #
# v 1.1, Mar 18, 2001 Customised for Dawn of time - Kalahn #
#########################################################################
#########################################################################
# Define the important vars #
# #
# Define the host and port number where the mud resides. #
$server = "localhost";
$port = "1111";
# $string is the string of characters we will look for upon connecting. #
# If we connect, but don't see this string, we will assume the mud #
# isn't responding (locked up?) and we'll restart it. The string #
# *must* be on the first line after connect.
# You may enter this as a regexp if you wish. #
$replyString = ".+";
# How long do we wait before we connect timeout (in seconds)? #
$timeOut = "60";
# What to execute if we need to restart the mud. Please include the #
# FULL path. #
$exec = "ulimit -c unlimited ; /home/mf/dot/dawn";
# Path where you want the mud logs to be kept.
$logdir = "/home/mf/dot/logs/game";
# Path where we should start the mud from. #
$startPath = "/home/mf/dot";
# That's it. You shouldn't need to change anything after this line. #
#########################################################################
# What do we need to use?
use Socket;
require 5.003;
#########################################################################
# Main #
#########################################################################
if (&connect_server == 0) {
# If we couldn't connect, try and restart. #
print ("Connection to $server on port $port failed or timed out after $timeOut seconds!\n");
$time = (scalar localtime);
print ("Attempting to restart the mud on $time...\n");
# Restart the mud #
&restart_mud;
}
else {
# We connected, but is it working properly? #
$readline = (&gl);
if ($readline =~ /$replyString/) {
# We found what we were looking for, so exit #
# properly. #
&disconnect_server;
exit 1;
}
# After all those searches, we didn't find anything. The mud #
# must be locked up. Lets kill and restart it. #
&disconnect_server;
print ("The connection was sucessful, but it doesn't seem to be responding\n");
$time = (scalar localtime);
print ("Attempting to restart the mud on $time...\n");
system("killall $exec");
&restart_mud;
}
#########################################################################
# Subroutines #
#########################################################################
sub connect_server {
# Connect to the server #
my ($iaddr, $paddr, $proto);
$iaddr = inet_aton ($server)
or die ("ERROR: No host: $server!\n");
$paddr = sockaddr_in ($port, $iaddr);
$proto = getprotobyname('tcp');
socket (SOCK, PF_INET, SOCK_STREAM, $proto)
or die ("ERROR: Socket error $!\n");
alarm ($timeOut);
if (connect (SOCK, $paddr)) {;
alarm (0);
return 1;
}
else {
return 0;
}
}
sub disconnect_server {
# Disconnect from the server #
close (SOCK);
return;
}
sub sl {
# Send a line #
my ($line)=@_;
print SOCK ("$line")
or die ("ERROR: Error writing to server: $!\n");
select SOCK;
$|=1;
select STDOUT;
$|=1;
return;
}
sub gl {
# Get a line #
my ($buffer, @reply);
$buffer=(<SOCK>);
# (@reply) = split (/\s/, $buffer);
# return (@reply);
return ($buffer);
}
sub restart_mud {
# Restart the mud #
$timet = time();
chdir $startPath;
system ("$exec $port > $logdir/$timet.log 2>&1 &");
return;
}
|