Snail/usr/local/sbin/snail.watcher
2012-03-20 16:46:24 +04:00

32 lines
870 B
Bash
Executable File

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:$PATH
SERVICE=/etc/init.d/snail-xserver
PROC=nvrun
LOCK_FILE=/tmp/.snail.lock
FIFO_FILE=/tmp/.snail.fifo
$SERVICE stop && snail.nv_pwr_off # stop X service
touch $LOCK_FILE && chown 0:0 $LOCK_FILE # create lock file
rm -f $FIFO_FILE && mkfifo --mode 640 $FIFO_FILE && chgrp video $FIFO_FILE # create fifo
{
echo >$FIFO_FILE | cat <$FIFO_FILE >/dev/null # flush fifo
flock -n 9 # make exclusive lock
while [ 1 ]; do
cat <$FIFO_FILE >/dev/null
flock -u 9 # unlock to get access for clients
flock -n 9
if [ 0 -ne $? ]; then # test is $LOCK_FILE locked by any client
snail.nv_pwr_on && $SERVICE start # starting X server
flock 9
echo >$FIFO_FILE | cat <$FIFO_FILE >/dev/null # flush fifo
$SERVICE stop && snail.nv_pwr_off # stopping X server
fi
done
} 9 > $LOCK_FILE