diff --git a/README.md b/README.md index dde2f6e..1af93be 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,6 @@ https://developer.valvesoftware.com/wiki/SteamCMD#Linux We assume you have created the `steam` user to store steamcmd and your ARK server. ## Requirements -Use this command to install soft requirement on your system -``` -# Debian based/ Ubuntu -apt-get install screen - -# RHEL / CentOS / Fedora -yum install screen -``` Edit /etc/sysctl.conf and set: ``` diff --git a/tools/arkdaemon b/tools/arkdaemon old mode 100644 new mode 100755 index 5fb27d9..a4fae1f --- a/tools/arkdaemon +++ b/tools/arkdaemon @@ -1,3 +1,4 @@ +#!/bin/bash ### BEGIN INIT INFO # Provides: ARK manager deamon # Required-Start: networking @@ -9,21 +10,15 @@ # ### END INIT INFO -# NOTICE: this daemon can work only if your system supports start-stop-daemon - # Using the lsb functions to perform the operations. . /lib/lsb/init-functions # Global variables -source /etc/arkdaemon.cfg -source /home/${steamuser}/.arkmanager.cfg +source /etc/arkmanager/arkmanager.cfg -NAME=arkmanager_daemon -DESC="ARK manager daemon used to start the server and keep it updated" -PIDFILE="/var/run/${NAME}.pid" +NAME="ShooterGameServer" LOGFILE="${logdir}/${NAME}.log" -DAEMON="arkmanager" -START_OPTS="--pidfile ${PIDFILE} --user=${steamuser} ${DAEMON}" +DAEMON="/usr/bin/arkmanager" set -e @@ -33,7 +28,10 @@ test -x $DAEMON || exit 5 case "$1" in start) log_daemon_msg "Starting" "$NAME" - if start-stop-daemon -b --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON ; then + su -s /bin/sh -c "$DAEMON start" $steamcmd_user + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then log_end_msg 0 else log_end_msg 1 @@ -42,28 +40,27 @@ case "$1" in stop) log_daemon_msg "Stopping" "$NAME" - kill ${cat $PIDFILE} - echo "$NAME." - rm -f $PIDFILE + su -s /bin/sh -c "$DAEMON stop" $steamcmd_user + sleep 5 + PID=`ps -ef | grep $NAME | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + log_end_msg 1 + else + log_end_msg 0 + fi ;; - restart|force-reload) - $0 stop && sleep 2 && $0 start + restart) + su -s /bin/sh -c "$DAEMON restart" $steamcmd_user ;; status) - # Check the status of the process. - PID=`ps -ef | grep $DAEMON | grep -v grep | awk '{print $2}'` - if [ -n "$PID" ]; then - echo "$NAME is running on PID $PID" - else - echo "$NAME is not running" - fi + su -s /bin/sh -c "$DAEMON status" $steamcmd_user ;; *) # For invalid arguments, print the usage message. - echo "Usage: $0 {start|stop|restart|status|force-reload}" + echo "Usage: $0 {start|stop|restart|status}" exit 2 ;; esac diff --git a/tools/arkmanager b/tools/arkmanager index 2c71c1b..8d6727b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -109,8 +109,7 @@ function isTheServerRunning(){ # If the server is listenning on his port return 0, else return 1 # function isTheServerUp(){ - PORT="7779" - lsof -i |grep $PORT > /dev/null + lsof -i |grep $arkserverport > /dev/null result=$? return $result } @@ -123,11 +122,11 @@ doStart() { if isTheServerRunning; then echo "The server is already running" else - arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?Port=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" + arkserveropts="TheIsland?SessionName=$sessioname?QueryPort=$arkqueryport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" thejob="$arkserverroot/$arkserverexec $arkserveropts" - screen -dmS "$servicename" $thejob + # run the server in background + $thejob >/dev/null 2>&1 & echo "$timestamp: start" >> "$logdir/arkserver.log" - tail -n 1 "$logdir/arkserver.log" fi } @@ -137,10 +136,10 @@ doStart() { doStop() { if isTheServerRunning; then echo "Stopping server..." - screen -X -S "$servicename" -X stuff "^C" - sleep 30 - echo "$timestamp: stop" >> "$logdir/arkserver.log" - tail -n 1 "$logdir/arkserver.log" + # kill the server with the PID + PID=`ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}'` + kill -9 $PID + echo "$timestamp: stop" >> "$logdir/arkserver.log" else echo "The server is already stopped" fi @@ -151,10 +150,10 @@ doStop() { # doInstall() { mkdir -p $arkserverroot - + # Check if steamcmd is installed, and if not, install it if [ ! -e $steamcmdroot/$steamcmdexec ]; then - mkdir -p $steamcmdroot + mkdir -p $steamcmdroot cd /tmp wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz tar -xvzf steamcmd_linux.tar.gz -C $steamcmdroot @@ -162,7 +161,7 @@ doInstall() { ./steamcmd.sh +quit echo "SteamCMD was installed in $steamcmdroot" fi - + cd $steamcmdroot # install the server ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 8789e68..e807853 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -8,7 +8,7 @@ sessioname=YourLinuxSessionName arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable arkqueryport="27016" # ARK query port (default 27016) -arkserverport="7779" # ARK server port (default 7779) +arkserverport="7778" # ARK server port (default 7778) arkserverpass="SERVERPASSWORD" # ARK server password, empty: no password required to login arkserverapass="ADMINPASSWORD" # ARK server admin password, KEEP IT SAFE! diff --git a/tools/install.sh b/tools/install.sh index 1a02ac9..7918678 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -5,22 +5,28 @@ if [ ! -z $1 ]; then cp arkmanager /usr/bin/arkmanager chmod +x /usr/bin/arkmanager - # Copy arkdaemon to /etc/init.d and set permissions + # Copy arkdaemon to /etc/init.d ,set permissions and add it to boot cp arkdaemon /etc/init.d/arkdaemon chmod +x /etc/init.d/arkdaemon + # add to startup if the system use sysinit + if [ test -x /usr/sbin/update-rc.d ]; then + update-rc.d arkdaemon defaults + echo "Ark server will now start on boot, if you want to remove this feature run the following line" + echo "update-rc.d -f arkdaemon remove" + fi # Create a folder in /var/log to let Ark tools write its own log files mkdir -p /var/log/arktools chown $1 /var/log/arktools # Copy arkmanager.cfg inside linux configuation folder if it doesn't already exists + mkdir -p /etc/arkmanager if [ -f /etc/arkmanager/arkmanager.cfg ]; then - mkdir -p /etc/arkmanager - cp -n arkmanager.cfg /etc/arkmanager/arkmanager.cfg - chown $1 /etc/arkmanager/arkmanager.cfg + echo "A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it."; + exit 2 else - echo "A previous version of ARK Server Tools was detected in your system, your old configuration was not overwritten. You may need to manually update it."; - exit 2 + cp -n arkmanager.cfg /etc/arkmanager/arkmanager.cfg + chown $1 /etc/arkmanager/arkmanager.cfg fi else