2017-06-18 4 views
1

J'exécute un script shell référencé dans rc.local. Le fichier est git-versioned et doit changer dans le répertoire personnel respectif de chaque utilisateur. Les chemins absolus fonctionnent bien, mais ceux-ci sont différents d'une machine à l'autre. $ HOME ou ~/ne sont pas encore définis, comment puis-je changer dans le répertoire de l'utilisateur principal dans rc.local au démarrage?

C'est le script de travail:

cd/home/nom d'utilisateur/rightDIR

php -S localhost: 8000

Ce script démarre le serveur, mais ne parvient pas à se déplacer dans la bon répertoire à l'avance:

cd $ HOME/rightDIR

php -S localhost: 8000

+0

Qui voulez-vous dire par "l'utilisateur principal"? '$ HOME' est défini, et' ~ 'utilisera la valeur courante de' $ HOME', mais ils se référeront tous les deux au répertoire personnel de l'utilisateur root, car 'root' est l'utilisateur qui exécute' rc.local'. – chepner

+0

Je veux dire l'utilisateur qui va se connecter, une fois la machine démarrée (par exemple moi-même), alors peut-être que je devrais reformuler: comment je peux cd dans le répertoire users même si le script est exécuté par root. (il n'y aura qu'un seul utilisateur sur chaque système) – TheRed

+0

Encore une fois, quel utilisateur? Les machines peuvent avoir plusieurs utilisateurs, et * aucun * d'entre eux sont connectés au moment où 'rc.local' est exécuté. Autre que 'root', il n'y a aucune notion d'un autre utilisateur distingué. S'il y a un utilisateur non-root spécifique impliqué dans une procédure de démarrage, vous devez être explicite dans le script sur qui c'est. La machine ne peut pas * deviner * qui se connectera une fois le démarrage terminé. – chepner

Répondre

1

cd /home/*/rightDIR && php -S localhost:8000 & devrait fonctionner si un seul utilisateur dispose d'un rightDIR dans leur dossier de base (sinon le premier match gagne). Le && enchaîne les commandes ensemble. Si la commande cd échoue, la commande suivante ne sera pas démarrée.

Le & à la fin lance la commande en tant que tâche shell en arrière-plan, de sorte que la coquille peut continuer et exécuter toutes les commandes qui viennent après cette ligne dans rc.local

Si le démarrage se bloque de toute façon, envisager d'ajouter nohup gauche de php à la place, afin de détacher la commande du shell.

+0

Solution de contournement très astucieuse, et dans mon cas d'utilisation: le dossier cible n'existe qu'une seule fois, ça marche très bien! – TheRed

+0

Heureux d'aider :) S'il y a toujours plus d'un tel dossier, vous pouvez également parcourir tous les fichiers/home/*/rightDIR et vérifier le contenu ou même démarrer un serveur web pour chaque :) – Jay