• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Programme per crontab starten unter verschiedenen usern

Svenbow

Newbie
Hallo Leute,
ich habe vor mehrere server auf meinem Linux laufen zu lassen
dabei wären CSS HL2DM TS server usw... jedes programm hat nen eigenen user unter dem sie ausgefürt werden.. und ich möchte
jetzt das contrab nach dem hochfaren und vor dem login die Programme unter den einzelnden usern startet.. blos wie?

CSS wir z.B. so gestartet : ./srcds_run -game cstrike +map de_dust -maxplayers 12
 

ChristianF

Newbie
Hallo,

bin mir nicht ganz sicher ob die Crontab der richtige Ort dafür ist.
Wenn Du was beim Hochfahren starten willst ist vielleicht ein Script unter /etc/init.d besser...

Ich habs noch nicht getestet aber was ist mit
Code:
sudo -u username command

Wenn ich an nen Rechner komme kann ich das prüfen.
 
A

Anonymous

Gast
als cronjobs scheint mir das nicht geeignet, cron arbeitet nach der Uhr. Damit könntest du zB bei einem Server der rund um die Uhr läuft 18.00Uhr die Serverdienst starten und 24:00Uhr die Serverdienst wieder herunterfahren. Wenn du dann allerdings den Rechner 18:05 Uhr rebootest, wird an diesem Tag nicht mehr gespielt. (zumindestens nicht automatisch)

Was du vorhast, müsst wahrscheinlich über Startscripte geregelt werden. Jetzt habe ich von diesen Programmen die du dort einsetzt, keinerlei Ahnung. Normalerweise bringen Serverdienste oftmals automatisch einige Scripte (auch schon Startscripte) und Konfigurationsdateien mit. In den Konfigurationsdateien sind dann auch uA. die Userkennung geregelt unter der der Server läuft, und normalerweise ist so ein User dann auch so angelegt, das man sich mit diesem Usernamen überhaupt nicht anmelden kann und dieser Username auch nur so minimale Rechte hat, das er gerade den einen Serverdienst bedienen kann und keinen Daumennagel mehr als irgendwie notwendig.

Ich glaube mal dieser Thread währe bei den Spielen besser aufgehoben und wahrscheilich auch besser zu lösen.

robi
 
OP
S

Svenbow

Newbie
naja das mit den usern is klar ich suche jetzt halt nur noch wie ich es hinkrige das z.B. der befehl ./srcds_run -game cstrike +map de_dust -maxplayers 12 nach dem hochfahren ausgeführt wird
 

admine

Ultimate Guru
Svenbow schrieb:
ich suche jetzt halt nur noch wie ich es hinkrige das z.B. der befehl ./srcds_run -game cstrike +map de_dust -maxplayers 12 nach dem hochfahren ausgeführt wird
Da wäre doch /etc/init.d/boot.local der richtige Platz ;)
 
OP
S

Svenbow

Newbie
okay und wie mach ich das jetzt mit den usern im comando?
Code:
su user -p pass befehl?

und wie muss ich das dort reinschreiben...
 
A

Anonymous

Gast
admine schrieb:
Da wäre doch /etc/init.d/boot.local der richtige Platz ;)
Spieleserver ohne random , syslog und network ....... :???: :???: :???: :???: :???: :???:
boot.local schrieb:
# /etc/init.d/boot.local
#
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
#
ist viel zu früh.

Svenbow schrieb:
... der befehl "./srcds_run -game cstrike +map de_dust -maxplayers 12 "...... ausgeführt wird
Der Befehl so wie du ihn hier schreibst kann so dort nicht ausgeführt werden.
Benötigt würde mindestens der volle Path zum Programm "srcds"

das Programm oder script srcds hat mit Sicherheit noch ein paar Optionsmöglichkeiten mehr, eventuell auch eine um einen User anzugeben. Sowas würde man finden entweder in der Doku der Manpage oder eventuell auch über die Optionen "--help" oder "-?" oder "-h"
Sollte es ein Script sein, kann man auch mal rein schauen, oftmals stehen da ein paar hilfreiche Worte drin.

Das Problem ist nicht dort einen Befehl mit anderen Userrechten auszuführen, das Problem ist die Prozessumgebung, die dort noch nicht gesetzt ist, Um diesen Befehl so wie er oben steht innerhalb der Startscripte automatisch zu starten, müssten noch ein paar Variablen für eine funktionierende Prozessumgebung richtig gesetzt und exportiert werden. unter anderen wohl USER PATH LANG sowie auf das richtige Verzeichnis gewechselt werden. Einiges wird das Script oder Programm auch selbst setzen, eventuell ist da auch noch einen Konfigdatei mit im Spiel. Leider kann ich dir da so nicht weiterhelfen, da ich sowas hier nicht selbst auf meinen Rechnern habe. Helfen kann hier nur jemand der sowas selbst oder zumindestens ein Stück Doku dazu auf dem Rechner hat.


robi
 
OP
S

Svenbow

Newbie
das is mein startscript
Code:
#! /bin/bash
#
# Start the Counter-Strike: Source dedicated server.
#
# AUTHORS :
#
# Julien Escario ( pandemik@azilog.net )
# &
# Cedric Rochat ( crochat@younics.org )
# &
# Cmdr._Firewalker ( cmdr._firewalker@web.de )
#
# ===========================================
#
# What you need:
#
# Linux :)
# awk
# screen
# the srcds_l & cstrike files (obtainable via steam)
#
# How to use:
#
# Edit the CS_USER-Var to the user running your cs-servers
# Edit the DIR-Var to fit your system (just contains the path to the dir that contains srcds_run)
# Edit the PARAMS-Var to fit your needs
# - standard is startup as internet server
# if you use multiple scripts on one system you should change the NAME-var (otherwise  
#   all will be stopped if you run the script with "stop", and status will be useless)
#
# When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the
# scripts for starting the services) and set the execute permission.
# Now you can link the script to your runlevel-dir, here's an example for runlevel 3:
# ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/S90srcds
# ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/K50srcds
# or use update-rc.d if you got a system using that tool (like Debian, see manpage)
#
# Or use it manually like:
# ./srcds start
# ./srcds stop
#
# To see the server-console start the script with the parameter "watch".
#
# DOC by jwm (jwm@counter-strike.de)

# !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!!
CS_USER=cssserveruser

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
DIR=/srcds

DAEMON=srcds_run

# LAN server:
# PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
# Internet server:
PARAMS="-game cstrike +map de_dust +maxplayers 12 -port 27015"

NAME=cssserver
DESC="CS:S dedicated server"

# No edits (should be) necessary beyond this line

if [ ! -x `which awk` ]; then echo "You need awk for this script"; exit 1; fi
if [ ! -x `which screen` ]; then echo "You need screen (the program, moron!) for this script"; exit 1; fi

if [ `whoami` = root ]
then
 usagetype=root
else
 usagetype=nonroot
fi

start() {
   if [ ! -d $DIR ]; then echo " ... No such directory: $DIR!";  exit 1; fi
   if [ ! -x $DIR/$DAEMON ]; then echo "$DIR/$DAEMON does not exist or is not executable!"; exit 1; fi
   if status; then echo " ... $DESC: $NAME is already running!"; exit 1; fi

   case "$usagetype" in
   root)
    su - $CS_USER -c "cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS"
   ;;
   nonroot)
    cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS
   ;;
   esac

}

stop () {
   if ! status; then echo " ... $DESC $NAME could not be found. Probably not running."; exit 1; fi

   case "$usagetype" in
   root)
    tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
    su - $CS_USER -c "screen -r $tmp -X quit"
   ;;
   nonroot)
    screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') -X quit
   ;;
   esac
}

status () {
   case "$usagetype" in
   root)
    su - $CS_USER -c "screen -ls" | grep [.]$NAME[[:space:]] > /dev/null
   ;;
   nonroot)
    screen -ls | grep [.]$NAME[[:space:]] > /dev/null
   ;;
   esac
}

watch () {
   if ! status; then echo "$DESC $NAME could not be found. Probably not running."; exit 1; fi

   case "$usagetype" in
   root)
    tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
    su - $CS_USER -c "screen -r $tmp"
   ;;
   nonroot)
    screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
   ;;
   esac
}

case "$1" in
 start)
  echo "Starting $DESC: $NAME"
  start
  echo " ... done."
 ;;

 stop)
  echo "Stopping $DESC: $NAME"
  stop
  echo " ... done."
 ;;

 restart)
  echo "Restarting $DESC: $NAME"
  status && stop
  start
  echo " ... done."
 ;;

 status)
  if status
  then echo "$DESC: $NAME is UP" 
  else echo "$DESC: $NAME is DOWN"
  fi
 ;;
 watch)
  watch
 ;;

 *)
   echo "Usage: $0 {start|stop|status|restart|watch}\nWhile watching press ctrl-a, ctrl-d to stop watching without stopping the server."
   exit 1
   ;;

esac


exit 0
 
A

Anonymous

Gast
Svenbow schrieb:
das is mein startscript
hab ich mir doch gedacht, das ist eine Vorlage für ein Bootscript
und hier steht auch was zu tun ist
# Edit the CS_USER-Var to the user running your cs-servers
# Edit the DIR-Var to fit your system (just contains the path to the dir that contains srcds_run)
# Edit the PARAMS-Var to fit your needs
# - standard is startup as internet server
# if you use multiple scripts on one system you should change the NAME-var (otherwise
# all will be stopped if you run the script with "stop", and status will be useless)
#
# When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the
# scripts for starting the services) and set the execute permission.
# Now you can link the script to your runlevel-dir, here's an example for runlevel 3:
# ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/S90srcds
# ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/K50srcds
# or use update-rc.d if you got a system using that tool (like Debian, see manpage)

Und dort sind die Änderungen zu machen
......
# !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!!
CS_USER=cssserveruser

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
DIR=/srcds

DAEMON=srcds_run

# LAN server:
# PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
# Internet server:
PARAMS="-game cstrike +map de_dust +maxplayers 12 -port 27015"

NAME=cssserver
DESC="CS:S dedicated server"
.....

also für jeden deiner User eine solche Datei (natürlich sollten sie sich im Dateinamen auch unterscheiden, da sie alle ins selbe Verzeichnis müssen) erzeugen, Namen Usernamen Parameter und Verzeichnis jeweils anpassen und dann nach /etc/init.d/ kopieren, und die Sys-Links wie oben angezeigt anlegen. (Solltest du Suse haben sind die Verzeichnisnamen etwas anders wie oben /etc/init.d und die entsprechenden Unterverzeichnisse rc3.d für Runlevel 3 zB .)

Aber Achtung: wenn dein Rechner Suse sein sollte, kann es durchaus sein, dass die Links demnächst mal verschwunden sind, das kann irgend ein Yastmodul oder auch nur ein einfacher Update oder irgend was anderes gewesen sein. Dann musst du die Links wieder neu anlegen. So wie ich das sehe hat man sich zwar jede erdenklich Mühe gegeben den Autor im Script gleich am Anfang zu hinterlegen, jedoch wird jeder Befehl insserv und alle anverwante Befehle die Links in den Unterverzeichnissen von /etc/init.d/ wieder löschen.

oder gleich richtig machen. http://www.linupedia.org/opensuse/Runlevel_scripte_-_Scripts_selbst_erstellen und die Scripte

robi
 
A

Anonymous

Gast
Svenbow schrieb:
insserv: script S50srcds missing LSB tags and overrides
kommt jetzt

Dein Script ist so nicht LSB-konform, den Link hatte ich dir oben schon gegeben.
setze folgende Zeilen an den Anfang des Scriptes am besten gleich ab der 2. Zeile. (die erste muss stehen bleiben wie sie ist)
Code:
### BEGIN INIT INFO 
# Provides: css 
# Required-Start: $network $remote_fs $syslog 
# Required-Stop: 
# Default-Start: 3 5 
# Default-Stop: 0 1 2 6
# Description: Start  CSS for username karl-otto
### END INIT INFO

robi
 
OP
S

Svenbow

Newbie
soo jetzt komms

das netzwek wird nicht mehr gestartet auch wenn ich das file lösche nicht

wie krige ich die werkseinstellungen wieder?
 
OP
S

Svenbow

Newbie
hallo leute es ist wichtig-.- wie krige ich das ganze suse System auf werkseinstellung zurück.. ohne CD!!!
 
Oben