• Как сделать грамотный счетчик в питоне?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    По феншую и правильно по хорошему бы реализовать класс, в котором будешь хранить состояние счётчиков

    import subprocess
    from time import sleep
    
    class CameraMonitor:
        def __init__(self):
            self.IP12 = '192.168.0.100'
            self.IP13 = '192.168.0.101'
            self.RODOS12 = '192.168.1.100'
            self.RODOS13 = '192.168.1.101'
            
            self.fail_count = {'Купол 12': 0, 'Купол 13': 0}
            self.reboot_count = {'Купол 12': 0, 'Купол 13': 0}
    
        def ping_camera(self, ip):
            cmd = f'ping {ip} -n 1 -w 100'
            response = subprocess.call(cmd, stdout=subprocess.DEVNULL)
            return response == 0
    
        def cameras_checker(self):
            r_dict = {'Купол 12': self.IP12, 'Купол 13': self.IP13}
            while True:
                for camera, ip in r_dict.items():
                    if self.ping_camera(ip):
                        print(f'Camera {camera} - OK')
                        self.fail_count[camera] = 0
                    else:
                        self.fail_count[camera] += 1
                        print(f'Camera {camera} - Died')
    
                        if self.fail_count[camera] >= 5:
                            self.cameras_reboot(camera)
    
                sleep(5)
    
        def cameras_reboot(self, camera):
            if camera == 'Купол 12':
                ip = self.RODOS12
            else:
                ip = self.RODOS13
            
            self.reboot_count[camera] += 1 
            print(f'Rebooting {camera} at IP {ip}')
    
        def info(self):
            for camera, count in self.reboot_count.items():
                print(f'Перезагрузок {camera}: {count}')
    
    
    if __name__ == "__main__":
        monitor = CameraMonitor()
        monitor.cameras_checker()
    Ответ написан
    3 комментария
  • Как сделать грамотный счетчик в питоне?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как-то так
    def cameras_checker(self):
        cameras = [
            {'name': 'Купол 12', 'ip': IP12, 'rebootIp': RODOS12, 'fails': 0},
            {'name': 'Купол 13', 'ip': IP13, 'rebootIp': RODOS13, 'fails': 0},
        ]
        while True:
            for camera in cameras:
                cmd = f"ping {camera['ip']} -n 1 -w 100"
                response = subprocesscall(cmd, stdout=subprocess.DEVNUL)
                if not response:
                    print(f'Camera {camera['name']} ok')
                    camera['fails'] = 0
                else:
                    camera['fails'] += 1
                    print(f"Camera {camera['name']} died")
                    if camera['fails'] = 5:
                        self.cameras_reboot(camera['rebootIp'])
            sleep(5)
    Ответ написан
    4 комментария
  • Как из одного приложения запустить другое?

    @res2001
    Developer, ex-admin
    Можно запускать скрипт удаленно с помощью psexec или wmi. Предварительно надо будет настроить все удаленные станции, чтоб можно было это использовать.
    Это может быть простой батник, который убивает процесс и запускает повторно. Правда есть нюанс - удаленно скрипт можно запустить только с админскими правами, а приложение надо запускать с правами пользователя и в сеансе пользователя.
    Чтоб решить эту проблему может быть запуск можно сделать не на прямую, а например из задачи шедулера, которую удаленным скриптом дергать. Кстати утилита schtasks, с помощью которой можно управлять заданиями шедулера из ком.строки, умеет работать удаленно. Так что возможно даже psexec/wmi не понадобятся. Т.е. нужно написать локальный скрипт, который ищет нужный процесс, прибивает его и запускает повторно. Настроить в шедулере задачу с фиксированным именем с запуском этого скрипта и выключить эту задачу. Дальше на сервере при наступлении события просто дергаете schtasks, который будет удаленно принудительно одноразово стартовать настроенную задачу.
    Ответ написан
    5 комментариев
  • Как запустить функцию в отдельном потоке второй раз?

    Vindicar
    @Vindicar
    RTFM!
    1.
    "RuntimeError: threads can only be started once"
    Можно ли это как-то обойти понятным для начинающего в python способом?

    Можно перестать хотеть странного и принять как данность, что завершившийся поток - завершился. С ним уже ничего не сделаешь. Это так на уровне ОС, если что. Так что создавай экземпляр Thread тогда, когда надо запустить поток.
    2.
    Может можно как-то по-другому стартовать, без доп функции?

    И как ты это себе представляешь? Tkinter должен знать, какой твой код выполнить при нажатии кнопки. Единственный способ это сделать - передать ему функцию или иной callable object. Да, можно использовать лямбду, но в лямбду много не уместишь, так что лучше функция.
    А когда придёшь к оборачиванию GUI в классы, поймёшь, что передача функции/метода - наиболее простой и практичный подход.
    Ответ написан
    1 комментарий
  • Как запустить функцию в отдельном потоке второй раз?

    @LanskoyGames
    У модераторов первое место, но только с конца...
    Может лучше асинхрнность(в Python - async), там и прерывание, возобновление, создание новых, асинхронных задач
    Ответ написан
    3 комментария
  • Как запустить функцию в отдельном потоке второй раз?

    @Everything_is_bad
    Как запустить функцию в отдельном потоке второй раз?
    надо всего лишь создавать поток именно в том месте, где его запускаешь
    Ответ написан
    2 комментария
  • Как определить область в потоке видео и среагировать на обнаружение?

    Vindicar
    @Vindicar
    RTFM!
    Ну так и скажи, "я хочу написать чит для Dead By Daylight, помогите!"
    Сделай полярное преобразование нужного куска экрана. Тогда нужная полоса превратится в вертикальную, и её легко можно будет выбрать обрезкой, а индикатор будет двигаться не по кругу, а по вертикали, и его движение будет проще анализировать.
    Впрочем, приколюхи вроде докторского безумия, которые меняет положение и направление движения индикатора, собьют твой алгоритм. А ещё есть скилл-чеки, у которых просто нет идеальной зоны, только хорошая.
    Ответ написан
    2 комментария
  • Как увеличить место под раздел linux?

    @ProFfeSsoRr
    Сис.админ по Linux
    хотя размер диска был около 7гб, а выделено было 100гб на HyperV

    В такой ситуации проще на свободное место создать рядом еще один раздел, скопировать на него эти ваши 7Гб, и так у вас появится время научится на другой виртуальной машине расширять диски. Когда научитесь - эти 7 гб добавите.
    Ответ написан
    Комментировать
  • Как увеличить место под раздел linux?

    @Zerg89
    Я бы разметил остаток диска и подключил бы его как /var/lib/mysql1 перенес данные и переподключил как /var/lib/mysql

    Подсказки
    man fdisk
    man mount
    Ответ написан
    Комментировать
  • Как увеличить место под раздел linux?

    @Drno
    надо расширить раздел линукса. т.к. видимо он не видит всё место, которое выделено

    если Вы взяли готовый образ, в котором размер 7гб и запустили его - то теперь только делать клон виртуалки, например с помощью clonezilla на более большой диск
    после клонирования надо будет увеличить раздел в самой системе.
    у меня обычно 1 раздел, поэтому я пользуюсь вот такой инструкцией, видимо её надо будет адаптировать
    spoiler

    As a matter of fact, you CAN enlarge the root filesystem while Ubuntu is running (I learned this recently myself here) - this sounds incredible but it's true :)

    Here's the list of steps for a simple scenario where you have two partitions, /dev/sda1 is an ext4 partition the OS is booted from and /dev/sdb2 is swap. For this exercise we want to remove the swap partition an extend /dev/sda1 to the whole disk.

    As always, make sure you have a backup of your data - since we're going to modify the partition table there's a chance to lose all your data if you make a typo, for example.

    Run sudo fdisk /dev/sda

    use p to list the partitions. Make note of the start cylinder of /dev/sda1
    use d to delete first the swap partition (2) and then the /dev/sda1 partition. This is very scary but is actually harmless as the data is not written to the disk until you write the changes to the disk.
    use n to create a new primary partition. Make sure its start cylinder is exactly the same as the old /dev/sda1 used to have. For the end cylinder agree with the default choice, which is to make the partition to span the whole disk.
    use a to toggle the bootable flag on the new /dev/sda1
    review your changes, make a deep breath and use w to write the new partition table to disk. You'll get a message telling that the kernel couldn't re-read the partition table because the device is busy, but that's ok.
    Reboot with sudo reboot. When the system boots, you'll have a smaller filesystem living inside a larger partition.

    The next magic command is resize2fs. Run sudo resize2fs /dev/sda1 - this form will default to making the filesystem to take all available space on the partition.

    That's it, we've just resized a partition on which Ubuntu is installed, without booting from an external drive.
    источник
    https://askubuntu.com/questions/116351/increase-pa...
    Ответ написан
    Комментировать
  • Как увеличить место под раздел linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если кратко то в вашем случае будет примерно так:
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
    echo ", +" | sudo sfdisk --no-reread -N 4 /dev/sda
    echo ", +" | sudo sfdisk --no-reread -N 5 /dev/sda
    sudo partx --update /dev/sda
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
    sudo resize2fs -f /dev/sda5
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda

    с помощью lsblk контролируем состояния
    первый sfdisk максимально раздвигает расширенный раздел, а второй sfdisk раздвигает уже сам раздел /dev/sda5
    sfdisk работает тока с таблицей разделов
    partx обновляет для ядра информацию по разделам на указанном диске
    ну и под конец с помощью resize2fs расширяем файловую систему до значений в таблице разделов.

    п.с.
    конечно это действие на свой страх и риск, перед началом отработайте на каком нибудь стенде и/или сделайте бекап важных данных с диска
    гипотетический стенд испытаний расширения смонтированного раздела

    $ truncate -s 1G test.img
    $ echo -e "label:dos\nsize=100M,bootable,type=L\nsize=200M,type=L\nsize=300M,type=L\ntype=Ex\nsize=+" | sfdisk test.img
    Проверяется, чтобы сейчас никто не использовал этот диск... ОК
    Диск test.img: 1 GiB, 1073741824 байт, 2097152 секторов
    Единицы: секторов по 1 * 512 = 512 байт
    Размер сектора (логический/физический): 512 байт / 512 байт
    Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
    
    >>> Заголовок скрипта принят.
    >>> Создана новая метка DOS с идентификатором 0xa605c035.
    test.img1: Создан новый раздел 1 с типом 'Linux' и размером 100 MiB.
    test.img2: Создан новый раздел 2 с типом 'Linux' и размером 200 MiB.
    test.img3: Создан новый раздел 3 с типом 'Linux' и размером 300 MiB.
    test.img4: Создан новый раздел 4 с типом 'Extended' и размером 423 MiB.
    test.img5: Создан новый раздел 5 с типом 'Linux' и размером 422 MiB.
    test.img6: Done.
    
    Новая ситуация:
    Тип метки диска: dos
    Идентификатор диска: 0xa605c035
    
    Устр-во    Загрузочный  начало   Конец Секторы Размер Идентификатор Тип
    test.img1  *              2048  206847  204800   100M            83 Linux
    test.img2               206848  616447  409600   200M            83 Linux
    test.img3               616448 1230847  614400   300M            83 Linux
    test.img4              1230848 2097151  866304   423M             5 Расширенный
    test.img5              1232896 2097151  864256   422M            83 Linux
    
    Таблица разделов была изменена
    Синхронизируются диски.
    
    $ losetup --partscan --show --find test.img
    /dev/loop0
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           1G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part         422M
    
    $ mkfs.ext4 /dev/loop0p5
    $ mkdir /tmp/mnt
    $ sudo mount /dev/loop0p5 /tmp/mnt
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           1G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
    
    
    $ truncate -s +1G test.img
    $ sudo losetup --verbose --set-capacity /dev/loop0
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
    
    
    $ echo ", +" | sudo sfdisk --no-reread -N 4 /dev/loop0
    $ sfdisk --dump /tmp/test.img
    label: dos
    label-id: 0xa605c035
    device: /tmp/test.img
    unit: sectors
    sector-size: 512
    
    /tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
    /tmp/test.img2 : start=      206848, size=      409600, type=83
    /tmp/test.img3 : start=      616448, size=      614400, type=83
    /tmp/test.img4 : start=     1230848, size=     2963456, type=5
    /tmp/test.img5 : start=     1232896, size=      864256, type=83
    
    $ echo ", +" | sudo sfdisk --no-reread -N 5 /dev/loop0
    $ sfdisk --dump /tmp/test.img
    label: dos
    label-id: 0xa605c035
    device: /tmp/test.img
    unit: sectors
    sector-size: 512
    
    /tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
    /tmp/test.img2 : start=      206848, size=      409600, type=83
    /tmp/test.img3 : start=      616448, size=      614400, type=83
    /tmp/test.img4 : start=     1230848, size=     2963456, type=5
    /tmp/test.img5 : start=     1232896, size=     2961408, type=83
    
    $ sudo partx --update /dev/loop0
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    1,4G 385,2M /tmp/mnt
    
    $ sudo resize2fs /dev/loop0p5
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    1,4G   1,3G /tmp/mnt
    
    $ sudo umount /tmp/mnt
    $ losetup -d /dev/loop0
    Ответ написан
    5 комментариев
  • Для чего на микрике мыши 3 контакта?

    Stalker_RED
    @Stalker_RED
    микрик для мыши распиновка
    bc6c5b.jpg
    Один нормально замкнутый, другой нормально разомкнутый, можно было и догадаться или прозвонить.
    Теперь ваша мышь ловит наводки на провод, либо же, даблклики были из-за излома в проводе, и перепайка микриков ничем не помогла (а может проблемы были и в микрике и проводе одновременно).
    Попробуйте отрезать несколько сантиметров провода, чаще всего он убивается в точке выхода из мыши. Жилы изламываются и начинают плохо контачить, изоляция изнашивается, вот это все.
    Ответ написан
  • Для чего на микрике мыши 3 контакта?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В телефонных станциях мне попадался экзотический вариант такого переключателя. Тип - "молоток".
    В нем красный был безобравно соединен с одним из других контактов. Разумеется это был не микрик.
    Это было реле. Даже в момент переключения был безобрывно соединен.
    Ответ написан
    Комментировать
  • Для чего на микрике мыши 3 контакта?

    @alexalexes
    Если появляются двойные срабатывания, я обычно, разбираю эту деталь иголкой прямо на плате, не прибегая к помощи паяльника. Чищу все пятаки якоря зубочисткой или тонкой отверткой, в зависимости от степени окисления этих пятаков, и потом собираю всё обратно. Хватает такого обслуживания на год.
    Ответ написан
    1 комментарий
  • Почему не отображаются все БД linux Mysql в Навикат?

    @kisaa
    Скорее всего, не хватает прав доступа для пользователей. Посмотреть можно так:
    https://dev.mysql.com/doc/refman/8.0/en/show-grant...
    Ответ написан
    3 комментария
  • Как узнать root пароль от mysql zabbix сгенерированный при установке?

    @Akina
    Сетевой и системный админ, SQL-программист.
    как узнать/сменить root mysql

    Узнать - никак, если не указано в документации.
    Сменить - How to Reset the Root Password, и лучше сразу Resetting the Root Password: Generic Instructions.
    Ответ написан
    3 комментария
  • Как в Wireshark определить источник пакета?

    NeiroNx
    @NeiroNx
    Программист
    Свич ретранслирует трафик согласно мак таблицам, считать мак таблицы можно на L2, L3 и то не везде. Пакет при этом дополнительно не модифицируется.
    Ответ написан
    9 комментариев
  • Как правильно организовать защиту одной сети от другой?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ставить свой роутер и наводить поверх одной сети вторую, например через vxlan.
    Ну, безопасники и так должны это знать, как и айтишники.
    Иначе, и тех и других гнать нужно играть в квиддич, на метлах.
    Ответ написан
    Комментировать
  • Как правильно организовать защиту одной сети от другой?

    @Drno
    Никак... отдел ИТ отвечает за сеть)))) как включит "защиту" так и выключит

    по сути единственный адекватный вариант - ставить роутер в "разрез" и включать на нем NAT (режим роутера собственно)
    но это не помешает отделу ИТ зайти на роутер а дальше попасть в сеть ОБ, при желании
    Ответ написан
    Комментировать
  • Возможно ли ограничить доступ ПК в сеть?

    bite_byte
    @bite_byte
    Я балда :)
    Мне кажется, что это всё теряет смысл, если есть доступ к iVMS, там же есть функция просмотр IP.
    Вариант с VLAN мне кажется самым разумным.
    Ответ написан
    8 комментариев