Anmeldeskripte, was zieht wann?
Anmeldeskripte, was zieht wann?
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ß
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ß
Re: Anmeldeskripte, was zieht wann?
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
"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
Re: Anmeldeskripte, was zieht wann?
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ß
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ß
Re: Anmeldeskripte, was zieht wann?
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: Mir wurde immer gesagt su - lädt die Umgebungsparameter mit, su nicht.
MaikKR hat geschrieben: Wie gestalte ich am besten den Aufruf der bashrc aus der bash_profile heraus?
Code: Alles auswählen
source ~/.bashrc
Code: Alles auswählen
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
ja, auch dann, außer du startest eine Login-Shell. Letzteres müßte eigentlich auch auf diese Art möglich sein: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?
Code: Alles auswählen
#!/bin/bash -l
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...
wenn du keine ~/.bash_profile und keine ~/.bash_login hast, dann sollte eigentlich die ~/.profile ziehen. Vielleicht hat dein Problem doch andere UrsachenMaikKR 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?
edit: falls du die ~/.profile Datei nicht als Tomcat User erstellt hast, überprüfe bitte ob der Tomcat User diese Datei auch lesen kann.
Re: Anmeldeskripte, was zieht wann?
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ß
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ß
Re: Anmeldeskripte, was zieht wann?
hier wird überprüft, ob die Datei existiert, wenn ja wird diese geladenMaikKR hat geschrieben: Was ist deine if-Bedingung? Die verstehe ich nicht so recht.
Re: Anmeldeskripte, was zieht wann?
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ß
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ß
Re: Anmeldeskripte, was zieht wann?
Vielleicht etwas Offtopic:
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.
Code: Alles auswählen
strace -ff -o out.txt su - tomcat ....
Die out.txt.<pid>-Dateien sollten dann zeigen, was wann wie und warum aufgerufen wurde.