1 votes

Annuler l'exécution d'un script en arrière-plan à partir de n'importe quel script.

J'ai un script que je laisse généralement tourner en arrière-plan ; il met en place une redirection de port que j'utilise pour les connexions à la base de données tout en développant une application dont les détails n'ont pas d'importance pour l'instant. Comme je veux que ce script tourne en permanence, je l'ai configuré pour qu'il démarre à chaque fois qu'un nouveau script s'ouvre - il vérifie si ce port est utilisé et commence la redirection si ce n'est pas le cas.

function forward {                                                                   
    if lsof -Pi :55433 -sTCP:LISTEN -t >/dev/null ; then
        echo "redirect already running"
    else
        target=$(~/environment-destination.sh staging)
        ~/forwarder.sh 55433 stuff.rds.amazonaws.com:5432 $target > /dev/null &
        echo "redirect running"                                                   
    fi                                                                           
}

Ce que je veux faire, c'est permettre à un autre script, exécuté dans n'importe quel script, d'arrêter ce script et de libérer le port. (Je veux cela principalement parce que je veux occasionnellement mettre en place une redirection vers l'instance de production au lieu de l'environnement de staging). J'ai essayé de sauvegarder le fichier pid dans un fichier et de lancer pkill sur elle, mais cela ne fonctionne pas - et pgrep ne le trouve pas non plus. Existe-t-il une meilleure approche ?

2voto

Frédéric Loyer Points 691

Vous devez créer un Shell Shell comme suit :

function forward {                                                                   
    if lsof -Pi :55433 -sTCP:LISTEN -t >/dev/null ; then
        echo "redirect already running"
    else
        target=$(~/environment-destination.sh staging)
        ~/forwarder.sh 55433 stuff.rds.amazonaws.com:5432 $target > /dev/null &
        echo $! > /tmp/forward.pid
        echo "redirect running"                                                   
    fi                                                                           
}

Ensuite, la mise à mort de votre transfert est effectuée par kill $(cat /tmp/forward.pid)

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