Hey guys,
I've written a srcds_run replacement script called 'nemrun' along with
a helper python script 'srcupdatecheck'. This script is meant to be a
no-nonsense srcds_run replacement with some advanced features:
- Able to handle -autoupdate, including on orangebox games and setups
with ./steam in an unusual place
- Able to update servers that share a install directory:
- First server to detect an update on restart (from
map-change-restart provided by -autoupdate, or due to a manual 'quit'
or other exit/crash) will 'lock' the directory with an update.lock
file
- Other servers (running in screens) are sent a 'quit' message
- Other servers see the first server is updating them and wait for
it to complete
- Script can be configured to retry a failed update x times over y seconds
- Other servers periodically make sure the server/runscript doing
the update hasn't crashed (and take over if so)
- Once update has been complete lock is removed and all servers
restart in unison
- Logs restart/update events into a separate reboot.log file, which
can be be named statically or given dated names (such as
rebootlogs/reboot_YYYYMMDDHHmmSS.log)
- Core files can be turned on and named dynamically (again with the
option of including YYYY/MM/DD/etc datestamps and folder prefixes)
- the '$GAME/downloads' folder can be optionally 'cleaned' upon
reboot, by deleting orphans (files without associated .ztmp or vice
versa) as well as all files over X days old.
- (minor) $GAME/addons/bin is added to the bin search path, so you can
make that folder and put binaries (dll's/so's) for addons/extensions
in there instead of polluting the bin (or orangebox/bin) folder.
==
Because this script must be able to check for updates without actually
performing the updates (because it might need to kill other servers
running on the same install path) I have included my 'srcupdatecheck'
script. This script, which requires Python 2.3+ be installed (it will
be on most server systems), takes a steam.inf file as input
(./srcupdatecheck path/to/steam.inf) and sends a packet to the master
server to see if it is up to date. It is a rather crude method, but
proves very reliable and quick (can provide an update yes/no in 3
seconds as opposed to waiting 30+ for the hldsupdatetool, which also
would go ahead and perform an update without prompting)
===
REQUIREMENTS:
- bash (other modern shells probably work, but much of the syntax wont
work with a standard 'sh' shell. #!/bin/bash is specified in the
header, so when you run the script from any shell it will
automatically be put in its own bash sub-instance)
- Python 2.3-2.5 (others not tested) with standard (regex/socket/etc)
libraries for srcdsupdatecheck (srcdsupdatecheck required if using
-autoupdate)
- A willingness to report bugs to me (this is beta)
You MUST do ./nemrun --help and read the instructions - it uses
several command line parameters not used in srcds_run.
Latest Beta available here: (you need: nemrun, srcupdatecheck)
http://www.nephyrin.net/tools/nemrun/latest-beta/
===
INSTRUCTIONS
1. Get nemrun and srcupdatecheck from
http://www.nephyrin.net/tools/nemrun/latest-beta/
2. "chmod +x nemrun srcupdatecheck"
3. "./nemrun --help"
Example launch screen (taken from my test server):
screen -d -m -U -S testing ./nemrun -nemlog
"runlogs/Testing_%Y%m%d%H%M%S.log" \
-cleandownloads 10 -autoupdate -steamdir ../.. -srvdir tfbase \
-updatetries 3 -updatedelay 15 -sharedscreens proving,stomping \
-corefile "cores/Testing_%Y%m%d%H%M%S.core" \
\
-game tf +exec testing.cfg -ip 75.125.209.5 -port 27015 \
+maxplayers 32 +map pl_goldrush +servercfgfile testing.cfg \
+mapcyclefile map_testing.txt +motdfile testingmotd.txt \
+sv_logsdir logs_testing +log on \
+fps_max 128
THINGS TO NOTE:
- Note the 'required' command switches when using, say, -autoupdate.
It wont work without -srvdir / -steamdir set. The script will warn you
when you set things wrong
- Both -nemrun and -corefile take 'date' style date strings in
addition to regular strings. Type "man date" for more information and
see my example command.
- 'steamdir' is the path to steam from the server directory or an absolute path.
- 'srvdir' is the path to the ROOT of the server (if you have
/path/server/orangebox/tf, the srvdir is '/path/server') FROM the
steam dir. Both of these can be absolute paths if you want to be safe.
- 'sharedscreens' is a comma delimited list of other 'screens' (as
named by "screen -S name") running servers ON THIS SAME INSTALL PATH
that are USING THIS SAME RUNSCRIPT. You MUST specify these if you want
updates to work IF you're running multiple servers from the same
install path, so it knows to kill them before trying to update the
shared directory. Feel free to message me if this is confusing. For
instance, if you run servers in screens named "a" "b" and "sam", then
the server in screen "a" should have "-sharedscreens b,sam" (assuming
they're all running out of myservers/serverblah/)
- Servers in SEPARATE directories/installs should NOT use
-sharedscreens, as they wont be affected if another server is updating
its own independant directory.
==
CONTACT ME
with bugs or suggestions or questions or whatever. You may respond to
this thread, or IM me at:
Nephyrin (Skype/AIM)
[EMAIL PROTECTED] (MSN/XMPP(Jabber))
[EMAIL PROTECTED] (GTalk/XMPP(Jabber))
I'm on nearly 24/7
Remember this is *BETA* quality, I've been using it on my 32x servers
for some days, but that doesn't guarantee it wont break stuff ;-P
- Neph
_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please
visit:
http://list.valvesoftware.com/mailman/listinfo/hlds_linux