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

Befehl unter einem anderen Benutzer ausführen in der Shell

byron1778

Hacker
Hallo Forum,

ich möchte 2 Befehle unter einem anderen Benutzer ausführen.
Wobei das Script von root ausgeführt wird und der darin enthaltene Befehl im Script wird dann von einem anderen Benutzer aber ausgeführt.

Ich weiss, dass es durch su - <Benutzer> -c "command" funktioniert.

Nur ist mein Problem dieses, dass ich erst das Verzeichnis wechseln muss und dann wird der 2te Befehl ausgeführt, der wiederum aber sich in einem anderen Verzeichnis befindet und gleichzeitig auf das aktuelle Vezeichnis zugreifen muss, und genau da weiss ich nicht weiter.

Die 2 Befehle:

Code:
su - kplus -c 'cd /opt/kondor/UBS_SC'
su - kplus -c '/usr/bin/nohup ./start ccp00111 Fhs000028 -daemon >> scserver.nohup &'

So wie im Code - Teil abgelichtet geht es leider nicht, weil ja das Commando ausgeführt wird und dann so glaube ich ein exit automatisch ausgeführt wird, somit weiss der User ja ncht mehr, dass er aus dem Verzeichnis, in welches gewechselt wurde, weiterarbeiten soll.

Danke für jede Hilfe.

LG
Bernd
 
OP
B

byron1778

Hacker
Ich antworte mir selber:

Ich habe das Script nun so umgeschrieben:

Code:
su - kplus -c 'cd /opt/kondor/UBS_SC; /usr/bin/nohup ./start ccp00111 Fhs000028 -daemon >> scserver.nohup &'

Leider kann ich es nicht ausführen im Moment, weil es eine Produktionsmaschine ist.
Aber ich glaube der Weg ist nicht so schlecht!

MfG
Byron
 

regexer

Advanced Hacker
Zwei Möglichkeiten:

1. Mit absoluten Pfaden arbeiten.
2. Die beiden Befehle mit && verknüpfen und mit einem su absetzen.

Letzteres würde ungefähr so aussehen:
Code:
su - kplus -c 'cd /opt/kondor/UBS_SC && /usr/bin/nohup ./start ccp00111 Fhs000028 -daemon >> scserver.nohup &'
 

regexer

Advanced Hacker
Jetzt haben wir zeitgleich geantwortet ...
byron1778 schrieb:
Code:
su - kplus -c 'cd /opt/kondor/UBS_SC; /usr/bin/nohup ./start ccp00111 Fhs000028 -daemon >> scserver.nohup &'
Geht natürlich auch. Allerdings wird der zweite Befehl ausgeführt auch wenn der cd auf einen Fehler lief. Ein && (wie oben beschrieben) würde nur zum nohup kommen, wenn der cd erfolgreich war.
 
OP
B

byron1778

Hacker
Aha, ok danke.

Das würde bedeuten, dass Deine Vorgehensweise vermutlich ein wenig besser ist, bzw. richtig ist.

Dann werde ich Deinen Befehl verwenden.

Danke vielmals.

MfG
Byron
 

Leviathan

Hacker
Als Script gehts auch.

CEST 16:14:50 root@nagios2 /> su - nobody -c /tmp/startme.sh
-rw-r--r-- 1 nobody nobody 0 2007-06-14 16:14 testfile
nobody


CEST 16:14:52 root@nagios2 /> cat /tmp/startme.sh
cd /tmp
touch testfile
ls -la testfile
whoami
exit

CEST 16:15:02 root@nagios2 />

Gruß Dominik
 
Oben