Re: Umleitung in Datei bei Sudo?
- From: Helmut Waitzmann <Helmut.Waitzmann@xxxxxx>
- Date: Thu, 11 May 2006 23:40:31 +0200
Andreas Mandalka <andreas@xxxxxxxxxxx> writes:
Wenn ich folgende Zeile als entsprechender Benutzer, dem die Datei gehört)
ausführe:
./etded.x86 +set fs_homepath ${GS_HOME} [...] 2>server.log
dann funktioniert alles wie es soll; etded.x86 wird ausgeführt und in der
Serverlog steht, was drin stehen soll.
Wenn ich obere Zeile in eine Datei hineinpacke und die mittels sudo
ausführe:
sudo -u ${GS_USER} screen -dmS gameserver-${GS_USER} DATEI_MIT_BEFEHL.bash
dann funktioniert es auch.
Wenn ich allerdings den ganzen Aufruf in eine Zeile schreibe (also oberste
Zeile inklusive sudo):
sudo -u ${GS_USER} screen -dmS gameserver-${GS_USER} ./etded.x86 +set
fs_homepath [...] 2>server.log
dann wird die Datei server.log nicht angelegt. Wenn ich vorher die Datei
selbst anlege und dem Benutzer die Schreibrechte geben, funktioniert es auch
nicht; die Datei bleibt einfach leer. Das Programm an sich läuft jedoch.
Woran könnte das liegen?
Die Umlenkung des Fehlerkanals, »2>server.log«, wird vom das Kommando
interpretierenden Shell, nicht vom »sudo«-Programm bewerkstelligt.
Was musst Du also tun? Starte mittels »sudo« ein Shell, das die
Umlenkung vornimmt und die Aufgabe übergeben bekommt, den Programmaufruf
»./etded.x86 ...« vorzunehmen.
Das geht so:
sudo -u ${GS_USER} screen -dmS gameserver-${GS_USER} \
sh -c 'exec ${1+"$@"} 2>server.log' sh \
./etded.x86 +set fs_homepath ${GS_HOME} [...]
Hinweis: Die »\« an den Zeilenenden bedeuten, dass die nächste Zeile
eigentlich hintendran gehört. Du musst sie also genau dann weglassen,
wenn Du alles in eine sehr lange Zeile schreiben willst.
Um zu verstehen, was bei diesem Kommando (soll heißen, bei »sh -c ...«
passiert, lies im Manual-Page des Shells im Abschnitt »OPTIONS« bei
Option »-c«, im Abschnitt »PARAMETERS« beim Unterabschnitt »Special
Parameters«, »@«, und im Abschnitt »EXPANSION«, »Parameter Expansion«
nach.
Ohne, dass Du das verstanden hast, solltest Du die Kommandozeile
eigentlich dem Shell nicht überantworten, mindestens nichts daran ändern.
Ist für mich wichtig, dass es alles in einer Zeilt funktioniert, bzw. in
einem Skript.
Sollte es tun.
Du solltest Dich dringend schlau machen, was es heißt, einem Shell eine
Kommandozeile zur Ausführung zu übergeben und folgende Aussagen und
Fragen bedenken:
In Unix/Linux gibt es beim Start eines Programms keine Kommandozeilen
sondern nur Programmaufrufe, denen Parameter mitgegeben werden.
Nun scheint aber
$ Programm mit Parametern und 2>Umlenkung
eine Kommandozeile zu sein.
Doch wie entsteht nun aus der Zeile ein Programmaufruf mit
Parameterliste?
Was hat das Shell dabei zu tun?
Wie unterscheidet sich in der Kommandozeile die Kanalumlenkung
»2>Umlenkung« von einem an das Programm übergebenen Parameter, der aus
der Zeichenfolge »2>Umlenkung« besteht?
Wie wird dem Shell mitgeteilt, welche Wörter der Kommandozeile
Kanalumlenkungen und welche Parameter sind?
Wer nimmt die Kanalumlenkung vor?
Wenn Du die Fragen beantworten kannst, dann ist auch das von Dir
geschilderte Verhalten zu erklären.
--
Wenn Sie mir E-Mail schreiben, stellen | When writing me e-mail, please
Sie bitte vor meine E-Mail-Adresse | precede my e-mail address with
meinen Vor- und Nachnamen, etwa so: | my full name, like
Helmut Waitzmann <xxx@xxxxxxxxxxx>, (Helmut Waitzmann) xxx@xxxxxxxxxxx
.
- References:
- Umleitung in Datei bei Sudo?
- From: Andreas Mandalka
- Umleitung in Datei bei Sudo?
- Prev by Date: Unison: Abgleich auf NTFS-Laufwerk (mit Captive)
- Next by Date: Re: Umleitung in Datei bei Sudo?
- Previous by thread: Re: Umleitung in Datei bei Sudo?
- Next by thread: Re: segfault und Kernel-Oops bei groesserem bzip2?
- Index(es):
Relevant Pages
|