• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Probleme mit cron + init.d + sudo

MisterMan

New Member
Hallo zusammen,

derzeit versuche ich einem Script, welcher eine Serveranwendung starten, bei Crash neustarten und restarten soll, für meinen Bedarf an zu passen. Der script kommt nicht von mir, daher auch die Probleme mit der Anpassung (verstehe nicht viel von shellscripting).

Code:
#!/bin/bash

### BEGIN INIT INFO
# Provides:		a3server
# Required-Start:	$remote_fs $network
# Required-Stop:	$remote_fs $network
# Should-Start:	mysql
# Should-Stop:	mysql
# Default-Start:	2 3 4 5
# Default-Stop:	0 1 6
# Description:	ArmA 3 init.d Script by Flodding
### END INIT INFO
#
#=======================================================================
#========               CONFIGURATION PARAMETERS                ========
#======== MUST BE EDITED MANUALLY TO FIT YOUR SYSTEM PARAMETERS ========
#=======================================================================
USERNAME=user
ARMA_DIR='/srv/server/user'
CONFIGFOLDER=${ARMA_DIR}
CONFIG=${CONFIGFOLDER}/server.cfg
CFG=${CONFIGFOLDER}/basic.cfg 
PROFILES=${ARMA_DIR}/user
PORT=2302 
PIDFILE=${ARMA_DIR}/${PORT}.pid 
SERVICE=arma3server 
BACKUPPATH=/home/${ARMA_DIR}/backup 
CPU_COUNT=12 
EX_THREADS=7 
BACKUPDAYS=3 
MODS="\"@extDB;@life_server\"" 
OPTIONS="-port=${PORT} -pid=${PIDFILE} -cfg=${CFG} -config=${CONFIG} -cpuCount=${CPU_COUNT} -exThreads=${EX_THREADS} -profiles=${PROFILES} -mod=${MODS} -autoinit -enableHT -noSound"
#=======================================================================
a3_start() {
  echo ""
  if [ ! -f $ARMA_DIR/$SERVICE ]
  then
    echo "$SERVICE not found! STOPPING !!!"
    echo ""
    sleep 1
    exit
  else
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is already running!"
      echo ""
    else
      echo "Setting Permissions to needed..."
      echo ""
	  chmod -R 0755 $ARMA_DIR
	  chown -R $USERNAME:$USERNAME /home/$USERNAME
      echo "Starting $SERVICE..."
      echo ""
         cd $ARMA_DIR
		 #sudo su $USERNAME -c "sudo nice -n -15 sudo -u $USER screen -dmS $USERNAME ./$SERVICE $OPTIONS" > stdout.log 2> stderr.log &
		 sudo su $USERNAME -c "screen -dmS $USERNAME ./$SERVICE $OPTIONS" > stdout.log 2> stderr.log &
      echo "Searching Process $SERVICE"
      echo ""
	  sleep 8
	  if pgrep -u $USERNAME -f $SERVICE > /dev/null
	  then
	    echo "$SERVICE is now running."
           echo ""
	  else
           echo "Error! Could not start $SERVICE!"
           echo ""
         fi
    fi
  fi
}
a3_stop() {
  echo ""
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Stopping $SERVICE !!"
    echo ""
	killall -9 -u $USERNAME
  else
    echo "$SERVICE is stopped."
    echo ""
  fi
}


case "$1" in
  start)
    a3_start
    ;;
  stop)
    a3_stop

    if [ -f ${PIDFILE} ]; then
    rm -f ${PIDFILE}
    fi
    sleep 5s
    ;;
  restart)
    a3_stop
    a3_start
    ;;
  status)
    if [ -f ${PIDFILE} ]; then
      PID=$(< ${PIDFILE})
      echo "PID-File existiert (PID=${PID})..."
        if [ -f /proc/${PID}/cmdline ]; then
          echo "Server Prozess scheint zu laufen..."
        fi
      fi
    ;;

*)
echo "$0 (start|stop|restart|status)"
exit 1
;;
esac

exit 0

Mein Problem welches ich habe, wenn ich einen Cronjob definiere, welcher alle 5 Minuten /etc/init.d./a3server start ausführt, passiert einfach garnix. Allerdings sollte der Script eigentlich so sicherstellen, dass der Server läuft. Weiterhin funktioniert Restart und Stop nicht richtig, sobald der Server gestoppt wird, schließt sich die gesamte Konsole.

Kann hier jemand helfen?

Vielen Dank!

Gruß
 
spontan würde ich auf Probleme mit PATH tippen - leider lässt sich mehr bei der Fehlerbeschreibung "es geht nicht" nicht raten...
 
USERNAME=user

Ist das nur die Scriptvorlage oder steht das tatsächlich so im Script?
Wenn ja, existiert der User mit dem Namen "user" tatsächlich?

Und wie marce schon erwähnte, stimmt diese Pfadangabe?
ARMA_DIR='/srv/server/user'
 
@nexus: Ich habe es etwas anonymisiert, und den Pfad und den Benutzer geändert. Tippe ich /etc/init.d/a3server start ein, klappt alles. Nur nicht als Cron.

@marce: Dann weist du wie es mir geht. Egal was ich versuche, es wird kein fehler in den Log geschrieben. Es gibt nur das Verhallten, was ich beschrieben habe!
 
@nexus: Ich habe es etwas anonymisiert, und den Pfad und den Benutzer geändert. Tippe ich /etc/init.d/a3server start ein, klappt alles. Nur nicht als Cron.

@marce: Dann weist du wie es mir geht. Egal was ich versuche, es wird kein fehler in den Log geschrieben. Es gibt nur das Verhallten, was ich beschrieben habe!
Dann würde ich mal einfach Debug-Ausgaben reinschreiben.

Wenn es an der Konsole geht und im cron nicht - tippe ich erneut auf PATH - die Cron-Umgebung ist eine andere als die von einer Login-Shell. Und direkte Aufrufe von z.B. sudo ohne absoluten Pfad gehen dann oft einfach in's Leere.
 
Hallo zusammen,

@GwenDragon:

Hier der Crontab, zu Testzwecken den kurzen Intervall!

Code:
* * * * * user /etc/init.d/a3server start > /home/user/a3log.log

@marce:

Leider wird kein Logeintrag für den Job geschrieben, selbst die Ausgabe nach a3log.log ist leer. Die pfäde habe ich angehangen, noch immer nix.
 
Okay, habe den Fehler gefunden.

Code:
# Shell variable for cron
SHELL=/bin/bash
# PATH variable for cron
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11


* * * * * /bin/bash --login /etc/init.d/a3server start > /home/user/a3log.log

Danke für die Tips!

Doch nun bleibt noch das Problem mit dem Script selber, sobald ich restart oder stop ausführe, wird die console geschlossen. somit funktioniert restart nicht!
 
naja, ich hab's mir nicht komplett durchgelesen aber
Code:
	killall -9 -u $USERNAME
ist so ziemlich das dümmste, was man in einem Script machen kann, wenn man hinterher noch weiter arbeiten will...
 
ist so ziemlich das dümmste, was man in einem Script machen kann, wenn man hinterher noch weiter arbeiten will...
Was erwartest Du von Gameserver-Kiddies? Ich nix...

Aber hast recht, ein "init 0" ist an der Stelle sinnvoller.
 
naja, immerhin ist ja noch der Username angegeben und das Script läuft hoffentlich nie als root...

Erinnert mich irgendwie an die gute alte Uni-Zeit, in der man mit 20 anderen zusammen mit dem gleichen ws94-Account auf einem Unix-System Übungen gemacht hat und als erstes in die .bashrc ein sleep 600 && kill -9 -1 & eingetragen hat...
 
Was erwartest Du von Gameserver-Kiddies? Ich nix...

Aber hast recht, ein "init 0" ist an der Stelle sinnvoller.


Ich muss mich entschuldigen, dass ich dieses Hilfeforum als Information für Hilfe genutzt habe. Wie ich lesen kann, ist dies ja nicht vorgesehen. Es ist wohl nur vorgesehen sich beleidigen zu lassen. Ist echt ein wenig arm von dir.

Beim nächsten mal möchte ich dich bitten, sinnlose Beleidigungen sein zu lassen. Damit wirfst du nur ein schlechtes Bild auf dich.
 
Last edited by a moderator:
Das bezog sich auf den Autoren des Init-Scripts, welches ganz offensichtlich für einen Gameserver, von Jemandem der wenig bis keine Ahnung vom System hat, zusammengeschustert wurde. Es war nicht auf den OP bezogen, denn das hätte ich, wie üblich, deutlich gemacht.

Aber gut, meine üblichen Formulierungen sind hier ja noch nicht wirklich bekannt, daher:

Ich bitte hiermit für die mir grundlos unterstellte Beleidigung um Entschuldigung.
 
Hay Joe User,

kam echt nicht so rüber, dann ist es ja in Ordnung. Dann entschuldige ich mich auch vielmals, dass ich mich darüber ausgelassen habe. Für mich ist das Gameserverthema aber nur ein Ausgleich und eine Freizeitbeschäftigung und ein Anlass zu basteln. Komme zwar auch aus der Informatik, aber hab keinen Bezug zur professionellen Linux Administration.

Auf jedenfall danke ich für die Anregung, ich bin gerade dabei den Script weiter anzupassen, sodass das Desaster mit dem killall weg ist :)
 
Back
Top