1 votes

Exécution de sh scripts au démarrage du système, erreur de fichiers non disponibles lors de l'exécution en root.

Je suis un débutant dans Ubuntu 20.04. J'ai une structure de fichier pour une application comme -

Accueil-->Dossier1-->execute.sh,main.py, utils.py, ui.py etc

Ce que j'ai l'intention de faire est d'exécuter le fichier execute.sh au démarrage du système. Les lignes de mon fichier execute.sh sont :

export PATH="/home/Folder1"
python3 -m venv venv
. ./venv/bin/activate
pip install python-dotenv
python /home/Folder1/main.py

J'ai essayé une tâche cron cron -e pour mettre une ligne sh \home\Folder1\execute.sh et lancer le processus, mais je n'ai pas réussi à le faire fonctionner. Après vérification, j'ai vu que lorsque j'accède à la racine et que j'essaie d'exécuter sh \home\Folder1\execute.sh jette l'erreur main.py not found . Je dois cd en \home\Folder1 et ensuite exécuter sh execute.sh pour le faire fonctionner. Quelle sera la meilleure façon de réaliser cela dans le système qui redémarre chaque fois automatiquement ?

2voto

Raffa Points 11919

C'est faux à bien des égards :) ... mais, c'est bon, nous allons arranger ça ensemble.

Premier niveau

cron est un démon/service permettant d'exécuter des commandes programmées ... Vous Ne le fais pas. ajoutez-y vos tâches cron ... vous ajoutez vos tâches cron de l'utilisateur crontab comme ça :

crontab -e

ou à la racine crontab comme ça :

sudo crontab -e

Il sera ensuite exécuté par cron automatiquement... C'est tout.

Deuxième niveau

sh \home\Folder1\execute.sh est un chemin d'accès de style Windows qui n'est pas valide sur Ubuntu et sera traduit par un nom de fichier unique (pas un chemin d'accès) comme ceci :

sh homeFolder1execute.sh

il devrait être avec la barre oblique / et non la barre oblique inversée, par exemple :

sh /home/Folder1/execute.sh

Troisième niveau

Su export PATH="/home/Folder1" n'est pas l'utilisation correcte qui pourrait donner le résultat que vous attendez de l'ajout de /home/Folder1 à PATH ... au lieu de cela, il remplacera tout ce qui se trouve déjà dans la variable d'environnement PATH par seulement /home/Folder1 et c'est un autre problème ... pour juste ajouter /home/Folder1 vous devez le faire comme ça :

export PATH="$PATH:/home/Folder1"

Niveau de bonus

En règle générale, lorsque vous utilisez crontab en général et de la racine crontab en particulier, indiquez le chemin complet de l'exécutable/s sur votre système (vous pouvez le trouver avec par ex. which sh ) comme suit :

/usr/bin/sh /home/Folder1/execute.sh

Utilisez également le chemin complet des exécutables qui sont utilisés dans votre script par exemple :

/usr/bin/python3 -m venv venv

et :

/usr/bin/python3 /home/Folder1/main.py

et :

/usr/bin/pip install python-dotenv

Bien que, pour les deux derniers, cela fonctionnera avec seulement python y pip dans un environnement virtuel Python comme vous le faites dans votre script.

Sinon, l'exécution de Shell pourrait échouer à trouver le chemin vers votre/vos commande(s) comme par exemple la variable d'environnement PATH de la racine renverra des chemins différents de ceux renvoyés par la variable d'environnement PATH de votre utilisateur. .

Vous pouvez, cependant, économiser en spécifiant le chemin complet de votre fichier script ainsi que d'autres script/files sourcés/référencés dans celui-ci par, d'abord, cd dans le répertoire qui le contient dans la ligne crontab comme ceci :

cd /home/Folder1 && /usr/bin/sh execute.sh

Cela ne vous empêchera pas de ne pas fournir le chemin d'accès complet aux exécutables sur votre système, comme par exemple /usr/bin/sh vous devez quand même les fournir ... pourquoi pas le chemin complet vers cd ? vous pourriez vous demander... eh bien, la réponse est la suivante cd est une commande intégrée de Shell. et fonctionnera très bien sans avoir besoin d'un chemin.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X