Swego czasu popełniłem 'takie coś' że widzę ile dana osoba ma urządzenie załączone w ciągu danego dnia. Po drobnej modyfikacji pewnie będzie i wylogowywać w zależności od ustawionego czasu (kod nie jest zoptymalizowany więc ... jak ktoś ma ochotę nie poprawi ):
Crontab:
*/1 * * * * /pinger
0 0 * * * /usr/bin/mysql -u logindb -phalodb bazadb -e "UPDATE ping SET czasWlaczenia=0"
Skrypt:
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ADRESYIP=(51 52 53 54 55 56 57 58 59 60 61 71 72 73 74 75 81 91 92)
mysql -u logindb -phaslodb bazadb -e "UPDATE ping SET online=FALSE"
for IP in ${ADRESYIP[*]}
do
echo Ping do xxx.xxx.xxx.$IP
TEST=`ping -c 1 -w 1 -q xxx.xxx.xxx.$IP |grep ' 0%'`
echo $TEST
if [ "$TEST" != '' ]
then
echo Działa
CZASZAPISANY=`mysql -u logindb -phaslodb bazadb --skip-column-names -e "SELECT ip, czasWlaczenia FROM ping WHERE ip=INET_ATON('xxx.xxx.xxx.$IP')"`
echo $CZASZAPISANY
if [ "$CZASZAPISANY" = '' ]
then
echo Nieznaleziono dopisuje
mysql -u logindb -phaslodb bazadb -e "INSERT INTO ping SET ip=INET_ATON('xxx.xxx.xxx.$IP'), czasWlaczenia=0"
else
echo Znaleziono aktualizuje
mysql -u logindb -phaslodb bazadb -e "UPDATE ping SET czasWlaczenia=czasWlaczenia+1, online=TRUE WHERE ip=INET_ATON('xxx.xxx.xxx.$IP')"
fi
else
echo Nie działa
fi
done
echo '
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>' > /var/www/czas.html
echo '<div class="col-sm-6"><table class="table table-striped table-hover table-condensed"><thead><tr class="text-center"><th>Nazwa</th><th>IP</th><th>Czas włączenia</th><th>Online</th></tr></thead><tbody>' >> /var/www/czas.html
mysql -u logindb -phaslodb bazadb --skip-column-names -e "SELECT '<tr><td>', name, '</td><td>', INET_NTOA(ip), '</td><td>', FLOOR(czasWlaczenia / 60), 'h', czasWlaczenia - (60 * FLOOR(czasWlaczenia / 60)), 'min</td><td>', IF(online, '<span class=\"glyphicon glyphicon-ok text-success\"></span>', '<span class=\"glyphicon glyphicon-remove text-danger\"></span>'), '</td></tr>' FROM ping ORDER BY ip" >> /var/www/czas.html
echo '</tbody></table></div>' >> /var/www/czas.html
echo '</body></html>' >> /var/www/czas.html
Baza
CREATE TABLE `ping` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`ip` int(11) DEFAULT NULL,
`czasWlaczenia` int(11) DEFAULT NULL,
`online` bit(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ;