Anmeldeskripte, was zieht wann?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
MaikKR
Beiträge: 28
Registriert: 28.04.2008 14:48:51

Anmeldeskripte, was zieht wann?

Beitrag von MaikKR » 02.08.2010 19:29:43

Hey zusammen.
Ich habe auf meinem System mehrere User.
Davon heißt ein User tomcat und soll, wie sollte es auch anders sein, den Tomcat betreiben.
Wenn ich mit diesem User angemeldet bin und dann in einer Konsole den Tomcat starte läuft es bestens.
Wenn ich jedoch mit einer Rootshell das ganze mache und su - tomcat -c "Befehl" eingebe schlägt mein JDBC-Treiber quer.
Es muss also irgendwas sein, was beim grafischen Start und einer vollen Anmeldung gezogen wird, sonst aber nicht.
Wenn ich in einer Shell erst einen Su - auf tomcat mache klappt es auch nicht.

Die .profile und .bashrc von tomcat habe ich schon einander angepasst, da kann es nicht mehr her kommen.
Unter /etc/profile sollten allgemeingültige Profile liegen, die immer gezogen werden sollten.

Wo muss ich noch suchen? Habe ich einen globalen Gedankenfehler gemacht?
Welches Skript wird bei einer interaktiven Anmeldung gezogen und durch einen Su - nicht gezogen?


Gruß

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Anmeldeskripte, was zieht wann?

Beitrag von gms » 02.08.2010 21:11:38

erstmal, was wird wann gestartet:
"su - tomcat" startet eine interaktive Login-Shell, "su - tomcat -c command" eine nicht-interaktive Login-Shell
"su tomcat" startet eine interaktive Shell, "su tomcat -c command" eine nicht-interaktive Shell
X-Terminal startet in Normalfall eine interaktive Shell

Bei Verwendung der Bash:
.) Login Shell, hier ist es egal ob diese interaktiv ist oder nicht:
/etc/profile, danach das erste vorhandene Script von: ~/.bash_profile, ~/.bash_login, ~/.profile
.) interaktive Shell, wenn keine Login Shell: ~/.bashrc
.) nicht-interaktive Shell, wenn keine Login Shell: nichts

Wenn du also für den Tomcat User die gleichen Einstellungen haben möchtest, egal ob eine Login-Shell oder eine interaktive (Nicht-Login-)Shell gestartet wurde, dann ist es wahrscheinlich am Günstigsten die ~/.bashrc von der ~/.bash_profile aus aufzurufen und die wichtigen Einstellungen in der ~/.bashrc zu setzen.
Solange eine ~/.bash_profile existiert, wird die von dir erzeugte ~/.profile von der Bash ignoriert

Gruß
gms

MaikKR
Beiträge: 28
Registriert: 28.04.2008 14:48:51

Re: Anmeldeskripte, was zieht wann?

Beitrag von MaikKR » 02.08.2010 21:19:17

Hey gms.
Okay, das wird nun komplexer als gedacht.
Also mit meinem su - starte ich schonmal eine nicht interaktive Login-Shell.
Entschuldige die vermutlich dumme Frage,
aber was ist in einem Skript der große Unterschied zwischen interaktiv und nicht interaktiv?
Mir wurde immer gesagt su - lädt die Umgebungsparameter mit, su nicht.
Ich lade also bei einer nicht interaktiven Sache keine Skripte nach?
Auch nicht wenn ich im Header explizit /bin/sh drin stehen habe?
Die .bash_profile habe ich bisher nicht, kann man aber sicher schnell anlegen.
Wie gestalte ich am besten den Aufruf der bashrc aus der bash_profile heraus?
Die .profile habe ich mit der .bashrc angeglichen, das bringt scheinbar also nichts, richtig?
Danke für deine Mühe.


Gruß

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Anmeldeskripte, was zieht wann?

Beitrag von gms » 02.08.2010 21:37:22

MaikKR hat geschrieben: Mir wurde immer gesagt su - lädt die Umgebungsparameter mit, su nicht.
das ist eine Verallgemeinerung, Die Bash hat für interaktive Shells, die keine Login-Shells sind. das ~/.bashrc Script und kann daher auch hier Umgebungsvariablen setzen; bei anderen Shells ( z.B ksh ) würde obige Aussage zutreffen.
MaikKR hat geschrieben: Wie gestalte ich am besten den Aufruf der bashrc aus der bash_profile heraus?

Code: Alles auswählen

source ~/.bashrc
oder

Code: Alles auswählen

if [ -f ~/.bashrc ]; then
  source ~/.bashrc
fi
MaikKR hat geschrieben: Ich lade also bei einer nicht interaktiven Sache keine Skripte nach?
Auch nicht wenn ich im Header explizit /bin/sh drin stehen habe?
ja, auch dann, außer du startest eine Login-Shell. Letzteres müßte eigentlich auch auf diese Art möglich sein:

Code: Alles auswählen

#!/bin/bash -l
Aber es macht Sinn, wenn bei nicht interaktiven Scripten nicht immer die Umgebungsvariablen neu gesetzt werden.
Z.B erspart dies das oftmalige unnütze Ausführen dieser Scripte, ermöglicht ein Vererben der Umgebungsvariablen vom aufrufenden Script auf von diesem verwendete Scripte...
MaikKR hat geschrieben: Die .bash_profile habe ich bisher nicht, kann man aber sicher schnell anlegen.
Die .profile habe ich mit der .bashrc angeglichen, das bringt scheinbar also nichts, richtig?
wenn du keine ~/.bash_profile und keine ~/.bash_login hast, dann sollte eigentlich die ~/.profile ziehen. Vielleicht hat dein Problem doch andere Ursachen


edit: falls du die ~/.profile Datei nicht als Tomcat User erstellt hast, überprüfe bitte ob der Tomcat User diese Datei auch lesen kann.

MaikKR
Beiträge: 28
Registriert: 28.04.2008 14:48:51

Re: Anmeldeskripte, was zieht wann?

Beitrag von MaikKR » 02.08.2010 22:47:50

Hey.
Danke für deine Antwort.

Folgende Schleife ist mir unklar:

if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi

Was ist deine if-Bedingung? Die verstehe ich nicht so recht. Der Rest ist ja nur der Ladebefehl.
Mein Problem muss irgendwo in den Parametern liegen,
eben weil es angemeldet funktioniert.
Da muss irgendwas dazwischen liegen.

Ich werde testen und dann berichten.


Gruß

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Anmeldeskripte, was zieht wann?

Beitrag von gms » 03.08.2010 06:36:44

MaikKR hat geschrieben: Was ist deine if-Bedingung? Die verstehe ich nicht so recht.
hier wird überprüft, ob die Datei existiert, wenn ja wird diese geladen

MaikKR
Beiträge: 28
Registriert: 28.04.2008 14:48:51

Re: Anmeldeskripte, was zieht wann?

Beitrag von MaikKR » 03.08.2010 08:40:29

Hey gms.
Also, ich habe nun nochmal ganz kritisch geprüft.
Ich habe keine -bash_login, nur eine .bash_logout.
.bash_profile habe ich auch nicht, nur meine .profile.
Und die ist ja eigentlich okay.
Es muss also noch einen Unterschied geben wenn ich mich voll anmelde oder wenn ich nur einen su - tomcat - c "Befehl" mache.
Wo kann dieser denn noch liegen?
Die .profile sollte ja in jedem Fall gezogen werden, ein Verweis auf die bashrc ist auch enthalten.
Die etc Skripte sollten auch zu jedem Zeitpunkt gezogen werden, außerdem sind die ja allgemeingültig.



Gruß

uname
Beiträge: 12497
Registriert: 03.06.2008 09:33:02

Re: Anmeldeskripte, was zieht wann?

Beitrag von uname » 03.08.2010 09:50:59

Vielleicht etwas Offtopic:

Code: Alles auswählen

strace -ff -o out.txt su - tomcat ....
Anschließend direkt wieder "exit", um nicht zu viel Datenmüll zu generieren.

Die out.txt.<pid>-Dateien sollten dann zeigen, was wann wie und warum aufgerufen wurde.

Antworten