J'ai un simple script python que je dois démarrer et arrêter et j'ai besoin d'utiliser un script start.sh et stop.sh pour le faire.démarrage/arrêt du shell pour le script python
J'ai start.sh:
#!/bin/sh
script='/path/to/my/script.py'
echo 'starting $script with nohup'
nohup /usr/bin/python $script &
et stop.sh
#!/bin/sh
PID=$(ps aux | grep "/path/to/my/script.py" | awk '{print $2}')
echo "killing $PID"
kill -15 $PID
Je suis surtout préoccupé par le script stop.sh. Je pense c'est une manière appropriée de trouver le pid mais je ne parierais pas beaucoup dessus. start.sh le démarre avec succès. quand je lance stop.sh, je ne trouve plus le processus par "ps aux | grep 'myscript.py'"
mais les sorties de la console:
killing 25052
25058
./stop.sh: 5: kill: No such process
donc il semble que cela fonctionne et donne une erreur de toutes sortes avec « Pas ce processus ».
Est-ce réellement une erreur? Est-ce que j'approche cela d'une manière saine? Y a-t-il d'autres choses sur lesquelles je devrais porter attention?
EDIT - En fait, je fini avec quelque chose comme ceci: start.sh
#!/bin/bash
ENVT=$1
COMPONENTS=$2
TARGETS=("/home/user/project/modules/script1.py" "/home/user/project/modules/script2.py")
for target in "${TARGETS[@]}"
do
PID=$(ps aux | grep -v grep | grep $target | awk '{print $2}')
echo $PID
if [[ -z "$PID" ]]
then
echo "starting $target with nohup for env't: $ENVT"
nohup python $target $ENVT $COMPONENTS &
fi
done
stop.sh
#!/bin/bash
ENVT=$1
TARGETS=("/home/user/project/modules/script1.py" "/home/user/project/modules/script2.py")
for target in "${TARGETS[@]}"
do
pkill -f $target
echo "killing process $target"
done
Vous pouvez obtenir le PID de la commande précédente avec '$!'. Ensuite, vous pouvez l'utiliser dans le fichier 'stop.sh'. Vous n'avez également rien à faire pour commencer plusieurs fois et ainsi de suite. – will