TriSTaR
28.12.2015 - 08:44
А можно другой способ сделать?
Когда включиться компьютер написать в device_history значение "1" и время включения, а когда выключит (в конце рабочего дня) значение "0"... Типо как на форумах "был в сети в такое то время и вышел из сети в такое" ?
такое возможно? но как? ( (>_<) знаний пока у меня не хватает

)
он пишет только:
Цитата |
// Если статус изменился , записываем результат |
TriSTaR
28.12.2015 - 12:58
Kusss
ну чисто формально можно так сделать? Как на форумах.... Это типо Если статус изменился утром пишет 1 и время его, а когда выключил записывает 0 и время во скока... а не каждый раз?
Кстати, я поставил обновления каждые 10 мин. через CRON
Он так и делает.
Если ты запустишь запрос который я писал выше, он и выведет тебе .
192.168.*.* - 0/1(статус) - 50.xxx (время c момента вкл/откл в минутах).
killer8080
28.12.2015 - 15:11
Цитата (TriSTaR @ 28.12.2015 - 11:58) |
Kusss ну чисто формально можно так сделать? Как на форумах.... Это типо Если статус изменился утром пишет 1 и время его, а когда выключил записывает 0 и время во скока... а не каждый раз? Кстати, я поставил обновления каждые 10 мин. через CRON |
а сколько времени сканирование занимает?
TriSTaR
29.12.2015 - 08:29
Kusssон выводит, это да))) файл будет каждые 10 мин. запускаться, просто каждые 10 мин. будет по новому писать (INSERT делать), если так будет через неделю в базе 500 тис. строк будет
Я предлагаю такое решение: например,Пришел на работу компьютер с айпи 192.168.1.2 делается пинг и написать в базу 1 и его время, и если каждые 10 мин. файл будет обновляться пусть файл проверит статус айпи 192.168.1.2 и если он до сих пор онлайн не писать ничего в базу, и так каждый раз пока тот айпи не станет вне сети. А потом если он ушёл с работы, писать в базу значение 0 и время... Нужна проверка
killer8080примерно от 3 до 5-6 мин. в зависимости какой ответ приходит... если многие оффлайн много времени уходит...
TriSTaR
29.12.2015 - 08:38
Kusss
Цитата |
Он так и делает. Если ты запустишь запрос который я писал выше, он и выведет тебе .
192.168.*.* - 0/1(статус) - 50.xxx (время c момента вкл/откл в минутах). |
ну вроде да он так должен сделать... Т.к. там есть:
Цитата |
// Записываем изменения статуса if (count($array_status) > 0) {
|
но он каждый раз в базу пишет по новому всех, даже если статус не изменился
killer8080
29.12.2015 - 09:05
Цитата (TriSTaR @ 29.12.2015 - 07:29) |
killer8080 примерно от 3 до 5-6 мин. в зависимости какой ответ приходит... если многие оффлайн много времени уходит...
|
а вот теперь сравни с nmap
Nmap done: 508 IP addresses (149 hosts up) scanned in 16.83 seconds
разница на лицо

Цитата (TriSTaR @ 28.12.2015 - 07:44) |
А можно другой способ сделать? Когда включиться компьютер написать в device_history значение "1" и время включения, а когда выключит (в конце рабочего дня) значение "0". |
эта задача решается триггерами
TriSTaR
29.12.2015 - 09:41
killer8080
Цитата |
Nmap done: 508 IP addresses (149 hosts up) scanned in 16.83 seconds |
интересно интересно :P
Что нужно для этого сделать? Да и как можно обяденить его со скриптом которое выше написал KUS (с записыванием времени)? не могли бы его обяденить его с вашим скриптом
Цитата |
#!/bin/sh
db_user="username" db_pass="password" db_host="localhost" db_name="database" exec_db="mysql -h $db_host -u $db_user -p$db_pass -D $db_name -e" ip_list="/tmp/ip.list"
echo "Start scanning network (`date`) ..." [ -f $ip_list ] || $exec_db "SELECT DISTINCT ip_address FROM devices INTO OUTFILE '$ip_list'" && \ nmap -sP -iL $ip_list | grep -P -o "\d+\.\d+\.\d+\.\d+" >/tmp/active_ip.list && \ $exec_db "DROP TABLE IF EXISTS active_ip" && \ $exec_db "CREATE TABLE active_ip (id int not null auto_increment, ip varchar(15), PRIMARY KEY (id)) ENGINE=InnoDB" && \ $exec_db "LOAD DATA INFILE '/tmp/active_ip.list' INTO TABLE active_ip (ip)" && \ $exec_db "UPDATE devices SET status=1 WHERE ip_address IN (SELECT ip FROM active_ip)" && \ $exec_db "UPDATE devices SET status=0 WHERE ip_address NOT IN (SELECT ip FROM active_ip)" rm /tmp/active_ip.list echo "Done (`date`)"
|
killer8080
29.12.2015 - 10:19
Цитата (TriSTaR @ 29.12.2015 - 08:41) |
Что нужно для этого сделать? |
вписать в переменные свои данные доступа к БД
проверить установлен ли nmap, если нет - установить
запустить скрипт в консоли, убедится что работает как надо
добавить запуск в крон с интервалом 2-3 минуты
Цитата (TriSTaR @ 29.12.2015 - 08:41) |
Да и как можно обяденить его со скриптом которое выше написал KUS (с записыванием времени)? |
как и говорил, триггер на апдейт таблицы devices который будет добавлять записи при изменении статуса. PHP не нужна MySQL сама справится.
TriSTaR
29.12.2015 - 10:33
killer8080
Цитата |
вписать в переменные свои данные доступа к БД |
вписал!
Цитата |
проверить установлен ли nmap, если нет - установить |
Установлен, проверил и сканировал с запросом (помог администратор):
nmap -v -sP 192.168.1.0/24 192.168.10.0/24 192.168.60.0/24 >> scan.log 2>&1
Всё работает
Цитата |
запустить скрипт в консоли, убедится что работает как надо |
Так вот тут вопрос: с каким разрешением скрипт сохранить? Куда сохранить? и как запустить через консоль?
Цитата |
добавить запуск в крон с интервалом 2-3 минуты |
это уже после 10 января, администратор в Москву улетает сегодня чтобы отдыхать <_<
Цитата |
как и говорил, триггер на апдейт таблицы devices который будет добавлять записи при изменении статуса. PHP не нужна MySQL сама справится. smile.gif |
Примера не будет? :rolleyes:
З.Ы. не смог + поставить вам с Касом в карму.. говорит уже поставили, теперь через день :))
killer8080
29.12.2015 - 10:51
Цитата (TriSTaR @ 29.12.2015 - 09:33) |
Так вот тут вопрос: с каким разрешением скрипт сохранить? Куда сохранить? и как запустить через консоль? |
Ну вам там виднее "куда сохранить", с php скриптом этого вопроса не возникало же

Права нужно выставить на выполнение типа
chmod +x script.sh
Зайти на сервер по SSH и запустить.
Цитата (TriSTaR @ 29.12.2015 - 09:33) |
Примера не будет? :rolleyes: |
CREATE TRIGGER `devices_update` BEFORE UPDATE ON `devices`
FOR EACH ROW BEGIN
IF NEW.status <> OLD.status THEN
INSERT INTO `devices_history` (`ip`, `status`, `date`) VALUES (OLD.ip_address, NEW.status, NOW());
END IF;
END
Цитата (TriSTaR @ 29.12.2015 - 09:33) |
З.Ы. не смог + поставить вам с Касом в карму.. говорит уже поставили, теперь через день :))
|
да фиг с ней

у меня её валом
PS вообще правильней IPv4 адреса хранить в INT а не в VARCHAR, и на это поле нужно поставить индекс, поскольку по нему выборка идёт.
TriSTaR
29.12.2015 - 14:02
killer8080ГЫЫ... О.О
Зашёл на сервер через ssh (PUTTY), зашёл в путь...
дал права:
sudo chmod +x base_update.sh
после написал:
./base_update.sh
выдаёт такую ошибку
Start scanning network (Tue Dec 29 16:16:20 UZT 2015) ...
ERROR 1045 (28000) at line 1: Access denied for user 'test'@'%' (using password: YES)
rm: cannot remove `/tmp/active_ip.list': No such file or directory
Done (Tue Dec 29 16:16:20 UZT 2015)
Хотя не должен был, т.к. логин и пароль правильный...
db_user="test"
db_pass="test"
db_host="192.168.10.56"
db_name="test"
$link = mysqli_connect("192.168.10.56", "test", "test", "test");
killer8080
29.12.2015 - 14:34
Цитата (TriSTaR @ 29.12.2015 - 13:02) |
db_host="192.168.10.56" |
mysql сервер на другом хосте? Возможно удаленное подключение к нему запрещено.
Цитата (TriSTaR @ 29.12.2015 - 13:02) |
$link = mysqli_connect("192.168.10.56", "test", "test", "test"); |
php код запускается на том же хосте что и скрипт?
TriSTaR
30.12.2015 - 07:34
killer8080
Цитата |
mysql сервер на другом хосте? |
да на другом... Скрипт и сайт находиться на 192.168.1.7 , а mysql на 192.168.10.56.. У нас много серверов из за этого так..
Цитата |
Возможно удаленное подключение к нему запрещено. |
Но через php заходила же (
$link = mysqli_connect("192.168.10.56", "test", "test", "test");
)
Цитата |
php код запускается на том же хосте что и скрипт? |
да, этот php код как и все остальные находятся на 192.168.1.7
Цитата |
Access denied for user 'test'@'%' |
что за ироглифы после тест..
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.