web-dev-qa-db-fra.com

Le script init.d n'est pas exécuté

J'ai un script /etc/init.d qui démarre mon serveur Web. Je l'ai rendu exécutable et l'a ajouté (update-rc.d webserver defaults). Lorsque j'exécute le script à partir de la ligne de commande, tout fonctionne correctement (./webserver).

Mais après avoir redémarré mon système, mon serveur Web ne fonctionne pas.

#!/bin/sh

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

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

Le répertoire utilisateur pose-t-il un problème (je suis connecté en tant que root)?

3
eclipse

Le type d'extension de tilde souhaité est effectué en référence à l'utilisateur actuel du Shell. Par exemple, lorsque vous vous connectez en tant que root, ~ est /root. Si le script s'exécute avant que vous ne vous connectiez, ~ ne peut pas être développé dans le répertoire souhaité.

Utilisez le chemin complet du fichier dans votre script.

Pour référence future, here sont des exemples utiles d'utilisation de l'expansion du tilde dans les scripts

5
Zanna

Eh bien, il y a un problème dans votre script. Lorsque vous écrivez un script, utilisez de préférence un chemin aboslute au lieu de tilde (~). C’est peut-être le coupable qui a rendu le script inutilisable. Si vous voulez changer de répertoire, donnez le chemin complet comme/home/scripts/projets/à la place de ~/projects . Cela fait une différence beaucoup plus grande.

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

2) Ajoutez un travail cron au redémarrage.

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

3) Ajoutez vos commandes au fichier rc.local avant la dernière ligne exit.

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