scripts script resueltos programas programacion pasar parametros manejo español ejercicios ejemplos comandos comando cadenas shell ps

resueltos - Compruebe si el programa se está ejecutando con el script bash shell?



scripts linux ejercicios resueltos (3)

Puedes lograr casi todo en PROCESS_NUM con esta PROCESS_NUM una sola línea:

[ `pgrep $1` ] && return 1 || return 0

Si está buscando una coincidencia parcial , es decir, el programa se llama foobar y desea que su $1 sea ​​solo foo , puede agregar el -f switch a pgrep:

[[ `pgrep -f $1` ]] && return 1 || return 0

Poniendo todo junto, su script podría ser reelaborado de esta manera:

#!/bin/bash check_process() { echo "$ts: checking $1" [ "$1" = "" ] && return 0 [ `pgrep -n $1` ] && return 1 || return 0 } while [ 1 ]; do # timestamp ts=`date +%T` echo "$ts: begin checking..." check_process "dropbox" [ $? -eq 0 ] && echo "$ts: not running, restarting..." && `dropbox start -i > /dev/null` sleep 5 done

Corriendo se vería así:

# SHELL #1 22:07:26: begin checking... 22:07:26: checking dropbox 22:07:31: begin checking... 22:07:31: checking dropbox # SHELL #2 $ dropbox stop Dropbox daemon stopped. # SHELL #1 22:07:36: begin checking... 22:07:36: checking dropbox 22:07:36: not running, restarting... 22:07:42: begin checking... 22:07:42: checking dropbox

¡Espero que esto ayude!

Este es un ejemplo de un script de bash que verifica algún proceso en ejecución (daemon o servicio) y realiza acciones específicas (recargar, envía correo) si no se está ejecutando dicho proceso.

check_process(){ # check the args if [ "$1" = "" ]; then return 0 fi #PROCESS_NUM => get the process number regarding the given thread name PROCESS_NUM=''ps -ef | grep "$1" | grep -v "grep" | wc -l'' # for degbuging... $PROCESS_NUM if [ $PROCESS_NUM -eq 1 ]; then return 1 else return 0 fi } # Check whether the instance of thread exists: while [ 1 ] ; do echo ''begin checking...'' check_process "python test_demo.py" # the thread name CHECK_RET = $? if [ $CHECK_RET -eq 0 ]; # none exist then # do something... fi sleep 60 done

Sin embargo, no funciona. Tengo "ERROR: opción de basura". para el comando ps . ¿Qué hay de malo con estos scripts? ¡Gracias!


Si desea ejecutar ese comando, probablemente debería cambiar:

PROCESS_NUM=''ps -ef | grep "$1" | grep -v "grep" | wc -l''

a:

PROCESS_NUM=$(ps -ef | grep "$1" | grep -v "grep" | wc -l)


PROCESS="process name shown in ps -ef" START_OR_STOP=1 # 0 = start | 1 = stop MAX=30 COUNT=0 until [ $COUNT -gt $MAX ] ; do echo -ne "." PROCESS_NUM=$(ps -ef | grep "$PROCESS" | grep -v `basename $0` | grep -v "grep" | wc -l) if [ $PROCESS_NUM -gt 0 ]; then #runs RET=1 else #stopped RET=0 fi if [ $RET -eq $START_OR_STOP ]; then sleep 5 #wait... else if [ $START_OR_STOP -eq 1 ]; then echo -ne " stopped" else echo -ne " started" fi echo exit 0 fi let COUNT=COUNT+1 done if [ $START_OR_STOP -eq 1 ]; then echo -ne " !!$PROCESS failed to stop!! " else echo -ne " !!$PROCESS failed to start!! " fi echo exit 1