Script Shell Pour La Surveillance Du Processus
Ce
#!/bin/bash
if [ `ps -ef | grep "91.34.124.35" | grep -v grep | wc -l` -eq 0 ]; then sh home/asfd.sh; fi
ou cela?
ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
if [ "$?" -ne "0" ]
then
sh home/asfd.sh
else
echo "Process is running fine"
fi
Bonjour, comment puis-je écrire un script shell qui regarde dans les processus d'exécution et si il n'y a pas un nom de processus CONTENANT 91.34.124.35 puis exécuter un fichier dans un certain endroit, et je veux faire toutes les 30 secondes en boucle, je pense qu'il y a une commande de mise en veille.
Vous devez vous connecter pour publier un commentaire.
vous ne pouvez pas utiliser cron depuis sur la mise en œuvre je sais que la plus petite unité est d'une minute. Vous pouvez utiliser le sommeil, mais ensuite, votre processus de toujours être en cours d'exécution (avec cron, il sera lancé à chaque fois).
D'utiliser le sommeil juste
Si votre
pgrep
a l'option-q
pour supprimer la sortie (comme sur BSD) vous pouvez également utiliserpgrep -q
sans rediriger la sortie vers/dev/null
if
conditionnelle avec!
. Aussi, en utilisantpgrep
- qui toujours s'auto-exclut - au lieu deps
+grep
, leif
déclaration peut être simplifiée:if ! pgrep -f '91\.34\.124\.35' > /dev/null; then
pgrep -q
ne fonctionne pas sous Linux, malheureusement; d'où mon> /dev/null
redirection; de plus, (a) vous avez besoin d'-f
pour le match contre l'ensemble de la ligne de commande, pas seulement le nom du processus, et (b) vous n'avez pas besoin de la[9]
astuce lorsque vous utilisezpgrep
(pgrep
ne correspond pas à lui-même par défaut); si vous mettez à jour à nouveau, s'il vous plaît également refléter les changements dans les points ci-dessous le code.Tout d'abord, vous devriez être en mesure de réduire votre script pour simplement
Pour exécuter ce toutes les 30 secondes via cron (parce que cron ne fonctionne que chaque minute) vous avez besoin de 2 entrées - une pour exécuter la commande, un autre délai de 30 secondes avant d'exécuter à nouveau la commande même. Par exemple:
Pour faire de ce nettoyant, vous pourriez être en mesure de le premier magasin de la commande dans une variable et de l'utiliser pour les deux entrées. (Je n'ai pas testé).
p.s. Le ci-dessus suppose que vous êtes en train d'ajouter que, pour
/etc/crontab
. Pour l'utiliser dans un crontab (crontab -e
), il suffit de laisser le nom d'utilisateur (root
) avant la commande.Je conseille
watch
:Utiliser cron pour la "boucle toutes les 30 secondes" partie.
De toute façon est bien, vous pouvez l'enregistrer dans un .sh fichier et l'ajouter à la crontab pour exécuter toutes les 30 secondes. Laissez-moi savoir si vous voulez savoir comment utiliser crontab.
Essayez ceci:
Pas besoin d'utiliser
test
.if
lui-même va examiner le code de sortie.if ps -ef | grep -q "[9]1\.34\.124\.35"; then ...
. Les crochets de l'aider à filtrer l'grep processus à partir des résultats.Vous pouvez enregistrer votre script dans un nom de fichier, myscript.sh
ensuite, vous pouvez exécuter votre script par cron,
ou vous pouvez utiliser tout
Grâce.
J'ai trouvé deamonizing critique des scripts très efficace.
Vous pouvez utiliser
monit
pour cette tâche. Voir le docu. Il est disponible sur la plupart des distributions linux et dispose d'une simple config. Trouver quelques des exemples dans ce postPour votre application, elle va ressembler à quelque chose comme
Si monit n'est pas disponible sur votre plate-forme, vous pouvez utiliser supervisord.
Moi aussi je trouve cette question très similaire Répétez la commande automatiquement dans Linux. Il suggère d'utiliser des
watch
.