Maison >Opération et maintenance >exploitation et maintenance Linux >Exemple d'analyse de code de processus démon Linux

Exemple d'analyse de code de processus démon Linux

WBOY
WBOYavant
2023-06-02 20:31:091440parcourir

Le rôle du processus résident sous Linux ne peut pas être ignoré, mais les problèmes qu'il contient ne peuvent pas non plus être ignorés. Comment démarrer le processus, comment terminer le processus et comment redémarrer le processus après le blocage du processus. être conçu de manière raisonnable. Regardons un exemple de processus résident PHP contrôlé par le shell.

Copier le code Le code est le suivant :

#!/bin/sh
#filename test.sh
#Localiser absolument l'emplacement du fichier et ne l'exécutez pas Changer en fonction du répertoire
cd $(cd "$(dirname "$0")";pwd)
readonly path=$(pwd)/
file=$1 ;
runfile=" ${path}data/${file}.run"
diefile="${path}data/${file}.die"
readonly file="$ {path}${file}. php"
if [ ! -f "$file" ]; then
echo "veuillez sélectionner un fichier existant"
elif [ ! -f "$runfile " ]; alors
#Jugez ici. Si le fichier runfile n'existe pas, cela signifie que le processus n'existe pas. Démarrez le processus ci-dessous
echo $$>${runfile}
while true
do
if [ ! -f $ DIEFILE]; then
#Si le fichier Diefile n'existe pas, cela signifie que le programme continue de s'exécuter, sinon entrez ELSE et exécutez la sortie opération
/usr/bin/pHP -F $ {file}# 🎜🎜# touch $runfile
sleep 1
else
Effacer le runfile et diefile exit
If rm -rf $runfile && rm -rf $diefile ; then# 🎜🎜#                                                                                                                                              Dans le cas d'un fichier d'exécution, essayez de démarrer le processus
oldpid=`cat $ runfile`
newpid=`ps aux grep " process.sh $1" | grep -v grep | grep "$oldpid" | awk '{print $2}'`
if [[ $oldpid -eq $newpid ]]; then
#Si le processus Le numéro dans le fichier d'exécution est cohérent avec le numéro du processus cible en cours d'exécution, cela signifie que tout va bien ^_^
echo "le processus est en cours d'exécution maintenant"
exit
else
#Si le Le numéro de processus dans le fichier d'exécution ne peut pas correspondre au processus cible en cours d'exécution, cela signifie qu'il y a un problème avec le processus. Supprimez directement le fichier d'exécution et terminez le processus en cours
echo "situation d'erreur, tuez le processus d'exécution et supprimez le fichier d'exécution"
           ps aux | grep "process.sh $1" | grep -v 'grep' | awk '{print $2}' | # if [ $? -eq 0 ]; then
rm -f $runfile
else
echo $?>${path}/data/ error
                                                                                                                                                                              erreur Pour appeler le php, cela n'a aucune limitation. Ce que je veux expliquer ici, c'est cette méthode d'exécution du processus résident
Lorsque le fichier d'exécution existe, mais que le numéro du processus ne correspond pas au processus de suppression (c'est-à-dire où se trouve le reste rouge). exécuté) ), assurez-vous d'utiliser `grep -v $$` La fonction consiste à filtrer les processus en cours d'exécution, sinon ils seront tous tués et les suivants ne seront pas exécutés.
Une autre chose à faire. la note concerne le redémarrage automatique
Le redémarrage automatique peut être placé dans la crontab et exécuté de temps en temps. La situation spécifique sera traitée au cas par cas.

Copier le code Le code est le suivant :

crontab -e
#Ouvrez le planning utilisateur actuel et ajoutez le modèle
#Il y a 5 astérisques dans le planning, f1, f2, f3, f4, f5,
# où f1 représente les minutes, f2 représente les heures, f3 représente le jour, f4 représente le mois, f5 représente le jour de la semaine
#* représente chaque minute/heure /Jour/Mois/Dimanche, */n signifie exécution toutes les n minutes/heures/...

*/2 * * * * /root/test.sh

#无2 Exécuter une fois toutes les minutes


Ceci termine la fonction du processus résident. Si vous souhaitez terminer le processus, il vous suffit de toucher ${diefile} dans le répertoire correspondant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer