it-swarm.com.de

init.d-Skript wird nicht ausgeführt

Ich habe ein Skript /etc/init.d, das meinen Webserver startet. Ich habe es ausführbar gemacht und hinzugefügt (update-rc.d webserver defaults). Wenn ich das Skript über die Befehlszeile ausführe, funktioniert es einwandfrei (./webserver).

Aber nach dem Neustart meines Systems läuft mein Webserver nicht.

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

cd ~/projects/webserver
./.build/debug/webserver &
exit 0

Ist das Benutzerverzeichnis ein Problem (ich bin als root angemeldet)?

3
eclipse

Die Art der gewünschten Tilde-Erweiterung wird in Bezug auf den aktuellen Benutzer der Shell ausgeführt. Wenn Sie sich beispielsweise als root anmelden, lautet ~/root. Wenn das Skript ausgeführt wird, bevor Sie sich anmelden, kann ~ nicht in das gewünschte Verzeichnis erweitert werden.

Verwenden Sie den vollständigen Pfad zu der Datei in Ihrem Skript.

Zum späteren Nachschlagen sind hier einige nützliche Beispiele für die Verwendung der Tilde-Erweiterung in Skripten

5
Zanna

Nun, es gibt ein Problem in Ihrem Skript. Wenn Sie ein Skript schreiben, verwenden Sie besser aboslute path anstelle von tilde (~). Das könnte der Schuldige sein, der das Skript unbrauchbar gemacht hat. Wenn Sie das Verzeichnis ändern möchten, geben Sie den vollständigen Pfad wie/home/scripts/projects/anstelle von ~/projects an. Das macht viel mehr Unterschied.

Sudo su
chmod a+x /etc/init.d/webserver
update-rc.d webserver defaults

2) Fügen Sie beim Neustart einen Cron-Job hinzu.

Sudo su
crontab -e
@reboot /home/path/to/script.sh

3) Fügen Sie Ihre Befehle vor der letzten Zeile in die Datei rc.local ein Ausgang.

Sudo su
nano /etc/rc.local
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
cd /absolute/path/projects/webserver
./.build/debug/webserver &
3
SAGAR Nair