Udržování programu v chodu jeho opětovným spouštěním

V určitých situacích je třeba spustit program a nechat ho spuštěný tak dlouho, dokud ho využívá nějaký jiný program. Vytvořil jsem skript, který je možné opakovaně spouštět a tím program udržovat v chodu.

#!/bin/bash
# Run command (with parameters) and plan kill it in future.

if [ $# -le 2 ]; then
  echo "Usage: $0 directory time command [parameters]"
  exit 1
fi

DIR=$1
shift
SLEEP=$1
shift
COMMAND=$@

PID_STOP="stop.pid"
PID_PROG="prog.pid"

# Wait some time and then kill program
function stop_program {
  sleep $SLEEP

  ps -p $1 | grep $1 > /dev/null 2>&1
  if [ $? -eq 0 ]; then
    kill -15 $1
  fi

  if [ -f "$DIR/$PID_STOP" ]; then
    rm "$DIR/$PID_STOP"
  fi

  if [ -f "$DIR/$PID_PROG" ]; then
    rm "$DIR/$PID_PROG"
  fi
}

# Plan kill program in future
function reset_kill {
  stop_program $1 &
  echo "$!" > $DIR/stop.pid
}

# Kill old killer proccess and start new killer process
if [ -f "$DIR/$PID_STOP" ] && [ -f "$DIR/$PID_PROG" ]; then
  kill -15 `cat "$DIR/$PID_STOP"`
  reset_kill `cat "$DIR/$PID_PROG"`
  exit 1
fi

# Start program
$COMMAND > /dev/null 2>&1 &
PID=$!
echo "$PID" > "$DIR/$PID_PROG"
reset_kill $PID

Skript přijímá nejméně 3 parametry:

  • Adresář, kde se budou vytvářet PID soubory. Je třeba, aby uživatel měl k tomuto adresáři zapisovací a čtecí práva.
  • Čas ve vteřinách, po jehož vypršení dojde k ukončení programu, pokud nedojde k opětovnému volání skriptu.
  • Příkaz ke spuštění s případnými parametry.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *