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.