20.09.2017, 01:05
Since NGRP has been shut down and I have this service script that I setup only two weeks ago that'll no longer be used, I figure I'll share it here for anyone to use. This was made for CentOS7 but could likely be modified to work on any Unix system. It's really just a rewrite of TeamSpeak's ts3server_startscript.sh script, but it works all the same. This guide will assume that you've already setup the SA-MP server.
The first thing you're going to want to do is make sure you have a samp user account setup on your server:
Next, you'll want to set a password to the account, preferably something complex. You will not need this password again later, so feel free to use a randomly generated password.
Now that we have a working user account, we'll need to setup the server script to start, stop, and restart the server. Create a new file in the root directory of your SA-MP server (I named mine samp-server.sh):
(Text in red should be whatever your SA-MP server's path is)
Paste the following into the text editor:
Save the file (Ctrl+O) and exit the editor (Ctrl+W). A little note on how the script works, it starts the SA-MP process itself and creates a samp.pid file which stores the process ID (PID) for reference to check if the process is running. Now we can create the actual service file:
And the contents of the file:
(Again, text in red should be whatever your SA-MP server's path is)
Save the file and exit the editor and now we can enable the service and start the server:
Everything should now be setup. You can either use 'systemctl [start/stop/restart/status] samp.service' or 'service samp [start/stop/restart/status]' to manage the server.
The first thing you're going to want to do is make sure you have a samp user account setup on your server:
Code:
adduser samp
Code:
passwd samp
Code:
nano /home/samp/samp-server.sh
Paste the following into the text editor:
Code:
#!/bin/sh
# Copyright © 2017 Faskis
# (Also technically Copyright © 2010 TeamSpeak Systems GmbH as this is copied from ts3server_startscript.sh)
# All rights reserved
COMMANDLINE_PARAMETERS="&" #add any command line parameters you want to pass here
D1=$(readlink -f "$0")
BINARYPATH="$(dirname "${D1}")"
cd "${BINARYPATH}"
LIBRARYPATH="$(pwd)"
BINARYNAME="samp03svr"
case "$1" in
start)
if [ -e samp.pid ]; then
if ( kill -0 $(cat samp.pid) 2> /dev/null ); then
echo "The server is already running, try restart or stop"
exit 1
else
echo "samp.pid found, but no server running. Possibly your previously started server crashed"
echo "Please view server_log.txt for details."
rm samp.pid
fi
fi
if [ "${UID}" = "0" ]; then
echo WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
c=1
while [ "$c" -le 10 ]; do
echo -n "!"
sleep 1
c=$(($c+1))
done
echo "!"
fi
echo "Starting the SA-MP server"
if [ -e "$BINARYNAME" ]; then
if [ ! -x "$BINARYNAME" ]; then
echo "${BINARYNAME} is not executable, trying to set it"
chmod u+x "${BINARYNAME}"
fi
if [ -x "$BINARYNAME" ]; then
export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"
"./${BINARYNAME}" ${COMMANDLINE_PARAMETERS} > /dev/null &
PID=$!
ps -p ${PID} > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo "The SA-MP server could not start"
else
echo $PID > samp.pid
echo "SA-MP server started, for details please view server_log.txt"
fi
else
echo "${BINARNAME} is not exectuable, cannot start the SA-MP server"
fi
else
echo "Could not find binary, aborting"
exit 5
fi
;;
stop)
if [ -e samp.pid ]; then
echo -n "Stopping the SA-MP server"
if ( kill -TERM $(cat samp.pid) 2> /dev/null ); then
c=1
while [ "$c" -le 300 ]; do
if ( kill -0 $(cat samp.pid) 2> /dev/null ); then
echo -n "."
sleep 1
else
break
fi
c=$(($c+1))
done
fi
if ( kill -0 $(cat samp.pid) 2> /dev/null ); then
echo "Server is not shutting down cleanly - killing"
kill -KILL $(cat samp.pid)
else
echo "done"
fi
rm samp.pid
else
echo "No server running (samp.pid is missing)"
exit 7
fi
;;
restart)
$0 stop && $0 start ${COMMANDLINE_PARAMETERS} || exit 1
;;
status)
if [ -e samp.pid ]; then
if ( kill -0 $(cat samp.pid) 2> /dev/null ); then
echo "Server is running"
else
echo "Server seems to have died"
fi
else
echo "No server running (samp.pid is missing)"
fi
;;
*)
echo "Usage: ${0} {start|stop|restart|status}"
exit 2
esac
exit 0
Code:
nano /lib/systemd/system/samp.service
Code:
[Unit] Description=SA-MP Server After=network.target [Service] WorkingDirectory=/home/samp/ User=samp Group=samp Type=forking ExecStart=/home/samp/samp-server.sh start ExecStop=/home/samp/samp-server.sh stop PIDFile=/home/samp/sampmain.pid RestartSec=15 Restart=always [Install] WantedBy=multi-user.target
Save the file and exit the editor and now we can enable the service and start the server:
Code:
systemctl --system daemon-reload systemctl start samp.service systemctl enable samp.service


