Forum: PC-Programmierung Raspberry: rc.local Problem


von Kaltenhof (Gast)


Lesenswert?

Das Script unten ist ausführbar (-rwxr-xr-x) und ich habe erwartet, dass 
es nach dem Login - via PuTTY als User pi - in das Verzeichnis 
/home/pi/webserver wechselt. Es wird aber weder die IP-Adresse angezeigt 
noch in das Verzeichnis gewechselt.

Rufe ich das Script von der Kommandozeile auf (z. B. mit sudo 
/etc/rc.local) dann wird es ausgeführt, die IP-Adresse angezeigt, jedoch 
nicht in das Verzeichnis  /home/pi/webserver gewechselt.

Was muss ich ändern, damit nach dem Login das Script ausgeführt wird?

1
#!/bin/sh -e
2
#
3
# rc.local
4
#
5
# This script is executed at the end of each multiuser runlevel.
6
# Make sure that the script will "exit 0" on success or any other
7
# value on error.
8
#
9
# In order to enable or disable this script just change the execution
10
# bits.
11
#
12
# By default this script does nothing.
13
14
# Print the IP address
15
_IP=$(hostname -I) || true
16
if [ "$_IP" ]; then
17
  printf "My IP address is %s\n" "$_IP"
18
fi
19
20
cd /home/pi/webserver
21
22
exit 0

von Sven B. (scummos)


Lesenswert?

Du kannst kein Programm ausführen, was dein aktuelles Verzeichnis 
ändert. Das Working Directory ist eine Umgebungsvariable deines 
Prozesses, und ein Child-Prozess kann nicht die Umgebungsvariablen 
seines Parents ändern. cd ist ein Shell-Builtin und kein Programm, 
deshalb geht es da.

Du musst also ein Feature wie z.B. ~/.bashrc nutzen, um dein Ziel zu 
erreichen.

von Kaltenhof (Gast)


Lesenswert?

@ Sven

Vielen Dank für deine Antwort, insbesondere der Hinweis auf bashrc hat 
mir geholfen.

von imonbln (Gast)


Lesenswert?

Kaltenhof schrieb:
> Rufe ich das Script von der Kommandozeile auf (z. B. mit sudo
> /etc/rc.local)

Glückwunsch rc.local ist seit dem Jahre 1983 obsolet! und irgendwie ein 
Zombie der einfach nicht sterben will...

Egal auf Modernen Systemen, solltest du deine Anforderungen anders 
Umsetzen. mein Vorschlag wäre, das

[code]
cd /home/pi/webserver
[code]

zu realisieren, indem du das Home verzeichnis auf selbiges legst. dein 
Freund hierfür sollte der Parameter -d des Programm usermod sein. Das 
Requirement das der Benutzer sofort in dem Verzeichnis landet, stell ich 
mal nicht zur Frage, obwohl es zumindest unerwartet ist.

für das zweite Requirement das die Ip beim Login via Putty angezeigt 
wird möchte ich mal pam_motd in den Raum Werfen, die Konfiguration kann 
man zum Beispiel hier Bewundern. 
https://ownyourbits.com/2017/04/05/customize-your-motd-login-message-in-debian-and-ubuntu/

Generell möchte ich auch anregen, zu Hinterfragen ob /home/pi/webserver 
der geeignete Ort für den Inhalt deines Webserver ist, laut Filesystem 
Hierarchy Standard wäre es eher /srv/www oder was anderes unter /srv. 
Allerdings machen das Debian und Ubuntu auch nicht sondern nutzen 
stattdessen /var/www. Jedenfalls nichts unter /home/pi.

von Sven B. (scummos)


Lesenswert?

Hm, du argumentierst also dass der Webserver-Kram nicht in 
/home/pi/webserver liegen sollte (was ich ziemlich normal finde, mache 
ich auf meinem Server auch so), weil das non-standard ist, und im selben 
Post  schlägst du vor, das home-Verzeichnis des Benutzers 'pi' auf 
/home/pi/webserver zu setzen, was tausendmal mehr non-standard ist? :D

von imonbln (Gast)


Lesenswert?

Sven B. schrieb:
> und im selben
> Post  schlägst du vor, das home-Verzeichnis des Benutzers 'pi' auf
> /home/pi/webserver zu setzen, was tausendmal mehr non-standard ist? :D

ja etwas schizophren, ich weiss :D, aber Defakto versucht der TO genau 
das mit seinem Hack, das homeverzeichnis umzubringen und wenn es Ihn 
glücklich macht, dann bitte wenigstens Richtig :P

von Bauform B. (bauformb)


Lesenswert?

imonbln schrieb:
> Kaltenhof schrieb:
>> Rufe ich das Script von der Kommandozeile auf (z. B. mit sudo
>> /etc/rc.local)
>
> Glückwunsch rc.local ist seit dem Jahre 1983 obsolet! und irgendwie ein
> Zombie der einfach nicht sterben will...

weil es einfach nur funktioniert, so richtig unix-artig? Nur für diese 
Aufgabe hier ist es natürlich garnicht gedacht.

> Generell möchte ich auch anregen, zu Hinterfragen ob /home/pi/webserver
> der geeignete Ort für den Inhalt deines Webserver ist, laut Filesystem
> Hierarchy Standard wäre es eher /srv/www oder was anderes unter /srv.
> Allerdings machen das Debian und Ubuntu auch nicht sondern nutzen
> stattdessen /var/www. Jedenfalls nichts unter /home/pi.

Ungefähr seit 1983 kennen Webserver das public_html Verzeichnis unter 
$HOME...
https://httpd.apache.org/docs/2.4/howto/public_html.html

von Larry (Gast)


Lesenswert?

> das homeverzeichnis umzubringen

Was eine schlechte Idee ist, zumal in einem $HOME auch noch
sicherheitsrelevantes Zeug wie ssh-Keys u. ae. liegen kann.

Fuer so Directorywechselaktionen kann man sich ein paar
aliase definieren und die passend *rc des Accounts tun.

alias cdw='cd /home/pi/webserver'

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.