Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Задания crontab на точках доступа для перезагрузки., UniFi Network
 
Можно ли написать cron-задания на AP для перезагрузки устройства, которые сохранятся после перезагрузки? Я пробовал так:

vi /var или tmp/system.cfg  
Режим редактирования:  
cron.status=enabled  
cron.1.user=[USERNAME]
cron.1.status=enabled  
cron.1.job.1.status=enabled  
cron.1.job.1.schedule=45 3 * * *  
cron.1.job.1.cmd=/etc/persistent/reboot_cronbjob.sh  
Esc:wq

touch /etc/persistent/reboot_cronbjob.sh  
vi /etc/persistent/reboot_cronbjob.sh  
Режим редактирования:  
reboot  
Esc:wq

chmod +x /etc/persistent/reboot_cronbjob.sh

Когда я вызываю sh /etc/persistent/reboot_cronbjob.sh, AP перезагружается, но файлы пропадают после ребута.  

Пробовал ещё через crontab:  
mkdir /var/etc/crontabs  
crontab -e /var/etc/crontabs  
45 3 * * * ~/etc/persistent/reboot_cronbjob.sh

Тестировал и с:  
45 3 * * * /usr/sbin/reboot

Но файлы тоже исчезают после перезагрузки.  

Также пробовал править конфиг через WinSCP — результат тот же.  

Есть ли способ сделать это действительно постоянным?  

Ресурсы, которые я изучал и использовал для понимания:  
https://community.ui.com/questions/mPower-Mini-shell-scripting/52456d45-b0e0-48aa-a511-3477921ea15b#comment/e7527186-a5d3-4fbc-98a6-3e20c27ae1de  
и  
https://community.ui.com/questions/Simple-shell-script-for-remote-UAP-reboot/a6ca887c-735d-4939-a057-5d2b35ebe3d7
 
Предполагается, что устройство всё ещё связывается с контроллером. У меня довольно часто (примерно раз в месяц на 10 UAP-AC-Pro) устройства переходят в состояние «Отключено». К счастью, я могу перезагрузить их удалённо через PoE-коммутатор, но было бы здорово иметь возможность простой «перезагрузки с точки доступа». (Конечно, в идеале точки доступа не должны зависать, но на практике это происходит).
 
Я попробовал все расположения (data, sites и default) и настроил заново, но это не сработало. Есть идеи?
 
config.system_cfg.1=cron.status=enabled  
config.system_cfg.2=cron.1.status=enabled  
config.system_cfg.3=cron.1.user=admin  
config.system_cfg.4=cron.1.job.4.status=enabled  
config.system_cfg.5=cron.1.job.4.schedule=0 2 * * *  
config.system_cfg.6=cron.1.job.4.cmd=if ping -c 10 192.168.12.1 | grep from -q; then echo notboot; else reboot; fi  

@martijnjongen: Я пытаюсь сделать это, но столкнулся с проблемой на самом первом шаге: где именно должен находиться config.properties? Я использую контроллер на Windows и нашёл system.properties по пути C:\Users\username\Ubiquiti UniFi\data. Мне нужно создать config.properties в этой же папке? После того как погуглил, где найти config.properties, наткнулся на пару подпапок в папке data, но у меня их нет (например, sites/default или просто default). Учитывая, что программное обеспечение контроллера постоянно меняется, где мне лучше создать этот файл на Windows-контроллере версии 6.2.26? После того как создам файл с нужными строками, нужно ли перезапускать контроллер? Есть ли какой-то признак, что контроллер действительно считывает этот файл при провижининге (можно ли это увидеть в веб-интерфейсе или в логах)?
 
Спасибо, @martijnjongen, это очень помогло. Моя проблема в том, что иногда некоторые мои APs AC Mesh, которые подключаются через беспроводной uplink, не могут нормально переподключиться после потери соединения с uplink. Поэтому мне приходится ехать на объект и перезагружать устройство, чтобы AP перезапустился — тогда проблема решается. Но мне это не нравится.

Поэтому я решил создать что-то вроде netwatch через crontab, как ты писал выше про пинг. Но для AP, подключённых по беспроводной сети, нужно минимум расписание раз в 5 минут, чтобы дать достаточно времени для нормального подключения к uplink. Если задать время короче, есть риск зацикливания перезагрузок, потому что устройство просто не успеет подключиться к uplink, а уже начнёт пинговать шлюз.

И обязательно перезагружайте AP после принудительного provisioning, потому что служба crond не запускается сразу после provisioning, её нужно "подтолкнуть" перезагрузкой, тогда crond начнёт работать.

config.system_cfg.f09fc23c3216.1=cron.status=enabled  
config.system_cfg.f09fc23c3216.2=cron.1.status=enabled  
config.system_cfg.f09fc23c3216.3=cron.1.user=admin  
config.system_cfg.f09fc23c3216.4=cron.1.job.4.status=enabled  
config.system_cfg.f09fc23c3216.5=cron.1.job.4.schedule=*/5 * * * *  
config.system_cfg.f09fc23c3216.6=cron.1.job.4.cmd=sleep 260; if ping -c 6 172.16.100.1 | grep -q from; then echo ping OK; else sleep 10 && reboot; fi

Мне нужно добавить задержку в 4 минуты, потому что при перезагрузке crontab сразу запускается и выполняет пинг, а надо подождать эти 4 минуты, чтобы беспроводной uplink успел нормально подключиться.
 
У меня есть ещё более классное решение: постоянный скрипт, который пингует шлюз, и если пинг не проходит, перезагружает точку доступа. Очень полезно для беспроводных uplink-точек, которые порой теряют связь с верхним уровнем. Конечно, на основе примера ниже вы можете настроить что угодно — например, перезагружать каждые X часов.

В примере точка доступа проверяет связь в 2 часа ночи. Если подключения нет, перезагружает себя.

Создайте файл config.properties на вашем контроллере (если его ещё нет). Добавьте в него строки ниже. Убедитесь, что пользователь 'admin' в примере совпадает с SSH-пользователем для сайта. Также замените IP шлюза на правильный для вашего сайта (обычно это IP роутера). Проверьте, чтобы пользователь 'unifi' имел доступ к файлу. После этого проведите повторное развертывание точки доступа.

config.system_cfg.1=cron.status=enabled  
config.system_cfg.2=cron.1.status=enabled  
config.system_cfg.3=cron.1.user=admin  
config.system_cfg.4=cron.1.job.4.status=enabled  
config.system_cfg.5=cron.1.job.4.schedule=0 2 * * *  
config.system_cfg.6=cron.1.job.4.cmd=if ping -c 10 192.168.12.1 | grep from -q; then echo notboot; else reboot; fi
Страницы: 1
Читают тему (гостей: 1)