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

Problem mit boot.local

SlySnake

Newbie
Hallo ich habe folgendes Problem :

Habe einen Rootserver und möchte beim Systemstart einige Programme automatisch starten lassen jedoch als user und nicht als Root, da ich wusste das ich mit su den Benutzer wechseln kann dachte ich mir ich könnte die boot.local einfach so schreiben und es müsste gehen da es ja ( als ich alles per hand so eingegeben hab ) funktioniert hat.

boot.local :

#! /bin/sh
#
# Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany. All rights reserved.
#
# Author: Werner Fink <werner@suse.de>, 1996
# Burchard Steinbild, 1996
#
# /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.
#

# Oidentd Dateien Vorladen

export TCLLIB=/srv/www/htdocs/web3/files/lib
export TCLLIN=/srv/www/htdocs/web3/files/include
export LD_LIBRARY_PATH=/srv/www/htdocs/web3/files/lib

# HLTV-Server Dateien Vorladen
export LD_LIBRARY_PATH=/srv/www/htdocs/web5/hlds/

# Oidentd starten
oidentd -u web3 -g www

# In Ventrilo Verzeichnis wechseln
cd /srv/www/htdocs/web2/files/ventrilo2.14/

# Als User web2 einloggen
su web2

# Ventrilo starten
./ventrilo_srv -d

# In HLDS Verzeichnis auf web2 wechseln
cd /srv/www/htdocs/web2/hlds/

# CS 1.6 Server 2 starten
./hlds_run -game cstrike +maxplayers 12 +map de_nuke +port 27010 -autoupdate >/dev/null &

# User web2 ausloggen
exit

# In HLDS Verzeichnis auf web1 wechseln
cd /srv/www/htdocs/web1/hlds/

# Als User web1 einloggen
su web1

# CS 1.6 Server 1 starten
./hlds_run -game cstrike +maxplayers 11 +map de_nuke -autoupdate pingboost 3 >/dev/null &

# User web1 ausloggen
exit

# In HLDS Verzeichnis auf web5 wechseln
cd /srv/www/htdocs/web5/hlds/

# Als User web5 einloggen
su web5

# HLTV Server starten
./hltv +connect 62.75.178.159:27015 >/dev/null &

# User web5 ausloggen
exit

# In HLDS Verzeichnis auf web3 wechseln
cd /srv/www/htdocs/web3/hlds/

# Als User web3 einloggen
su web3

# CS 1.6 2on2 Server starten
./hlds_run -game cstrike +maxplayers 5 +map de_nuke +port 27030 -autoupdate >/dev/null &

# In Psybnc Verzeichnis wechseln
cd /srv/www/htdocs/web3/files/psybnc/

# Psybnc starten
./psybnc

# User web3 ausloggen
exit


Is wohl alles bissl umständlich geschrieben und so aber ich befass mich erst seit einiger zeit bissl mit linux und hab den dreh noch net so ganz raus. Aber auf jedenfall hab ich gemerkt, dass das mit dem exit befehl beim starten in der boot.local nicht so ganz funktioniert und das system beim starten stehn bleibt bis ich am rechner vor ort exit eingebe. Nun meine Frage : Wie kann ich meine boot.local umschreiben das er die Befehle als user startet und danach automatisch ausloggt ? Evtl könnte mir jemand meine boot.local ja editieren und posten wäre echt nett weil ich irgendwie so net weiterkomme. Habe es auch schon mit "su -l user -c befehl" versucht, aber wenn ich dann zb den befehl "ventrilo_srv -d" eingebe gibt er mir nen fehler wegen dem -d aus. Danke schonmal im vorraus...

mfg SlySnake
 

uli42

Newbie
Hi,

das mit "su" funktioniert etwas anders, als Du denkst. Wenn Du bei "su" direkt kein Kommando mitgibst, dann macht das quasi eine neue Shell auf. Dementsprechend wird die Bearbeitung des aktuellen Skriptes dann an dieser Stelle auch quasi unterbrochen. Du mußt in der neuen Shell dann "exit" eintippen, damit die verlassen wird und das Skript weiter ausgeführt wird (... als urprl. Benutzer natürlich, nicht als SU-Benutzer).

Hier ein Beispiel, wie's richtig geht (... ich hoffe, ich vertippe mich nicht):
Code:
su web2 -s /bin/bash -c "
cd /srv/www/htdocs/web2/files/ventrilo2.14/ 
&& ./ventrilo_srv -d 
"

Wichtig sind die Anführungszeichen, damit das Kommando komplett inklusive Leerzeichen und Zeilenvorschub von "su" ausgeführt wird. Folgendes müßte auch funktionieren:
Code:
su user -c "ventrilo_srv -d"

Ob Du die Option "-l" benötigst, mußt Du nachschlagen. Ich würde eher dazu neigen, die Option mit anzugeben, also immer "su -l ..." verwenden.

Viel Erfolg, Uli.
 
OP
S

SlySnake

Newbie
Jo vielen Dank für die schnelle antwort hat mir sehr geholfen ! Mit dem befehl funktioniert das wunderbar hab wie du gesagt hast auch überall -l gemacht zur sicherheit :)

mfg SlySnake
 
Oben