Задать вопрос
  • Есть ли решения для отправки почты после проверки службой безопасности?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Всю деятельность рядовых сотрудников вести через тикетницу, в которой они не смогут отправлять письма. Такое право будут иметь только специально выделенные сотрудники.
    Ответ написан
    Комментировать
  • Большое потребление SWAP в работе KVM?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Свободная память - это free. В avail показывается "потенциально доступная" память, если система сбросит все дисковые кэши.

    Система превентивно сбрасывает часть данных в swap для того, чтобы был запас свободной памяти. Это поведение зависит от переменной vm.swappiness, задающей процент занятой памяти, при превышении которого система начинает перенос данных в swap. Я бы посоветовал проверить её значение, возможно, там стандартные 60%, что на системе с 64 Гбайтами будет означать, что swap начинает использоваться после 38.4 занятой памяти. Собственно, в used на скриншоте почти столько и есть.

    Посмотреть текущее значение можно так:

    sysctl vm.swappiness

    Если это как-то мешает, можно увеличить, например, до 75%, что будет давать порог в 48 Гб. Но под кэш останется не больше 16 Гб, при активном дисковом обмене уменьшение может оказаться заметным, особенно на HDD.
    Ответ написан
    2 комментария
  • Где искать базу данных городов - стран - кодов телефонов?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По России официально: https://rossvyaz.gov.ru/deyatelnost/resurs-numerac...

    Также много есть в Википедии (в т.ч. англоязычной), но придётся вручную разбирать.
    Ответ написан
    Комментировать
  • Выполнение функции после определённой команды?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для начала надо изучить язык python...
    Ответ написан
    Комментировать
  • Есть ли модуль для работы с облачными хранилищами?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    У меги есть SDK
    https://docs.mega.nz/sdk/doc/index.html
    ну и гугл находит такой модуль
    https://pypi.org/project/mega.py/
    Ответ написан
    Комментировать
  • Оператор If в python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    1. Да, примерно так и есть.

    2. Условие гласит "результат выполнения функции сравниваем с нулём". Чтобы узнать результат выполнения - функцию надо выполнить. Так что команда запустится обязательно.
    Ответ написан
    Комментировать
  • TelegramBot Фильтр сообщений?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    for w in list_of_filter_words:
      if w.lower() in message.text.lower():
        bot.delete_message...
        break # чтобы прекратить дальнейший цикл


    Вообще лучше изучать сам язык, а не пытаться сразу ботов писать.
    Ответ написан
    2 комментария
  • Как получать несколько параметров клиента при вызове команды в Discord?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Конечно, ведь arg - строка, arg[0] - первый символ этой строки. Правильно так:

    async def test(ctx, *arg):
    Тогда arg будет массивом и arg[0] будет возвращать первый элемент массива.
    Ответ написан
    Комментировать
  • Как заставить телеграмм бота ожидать ответа от пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Получить сообщения можно либо через long poll (запрос /getUpdates бота), либо через вебхук. Второй вариант для простых ботов без особой нагрузки излишний. Так что скрипт можно организовать в виде цикла: выполняем запрос, смотрим нет ли там новых сообщений - обрабатываем.

    Если использовать популярную библиотеку telebot, то даже цикл писать не надо - только обработчик события "новое сообщение".
    Ответ написан
    Комментировать
  • Как сделать чтобы бот не мог пинговать роли?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Всё необходимое есть прямо в классе Message:

    for m in ctx.message.mentions:
      print ("user mention %s" % m)
    for m in ctx.message.role_mentions:
      print ("role mention %s" % m)
    if ctx.message.mention_everyone:
      print ('everyone mention')


    Соответственно, нужно сделать что-то типа:

    if ctx.message.role_mentions or ctx.message.mention_everyone:
      await ctx.send(author.mention+", не пингуй!")
    else:
      await ctx.send(msg)
    Ответ написан
    1 комментарий
  • Ошибка после обновления дискорд. Как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно просто обновить discord.py.

    pip install -U discord.py

    Описание ошибки в апстриме: https://github.com/Rapptz/discord.py/issues/5109
    Ответ написан
  • Стоит ли изучать математику по первоисточникам?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Труды некоторых математиков XX века вполне можно читать и научиться полезному, они используют достаточно современную терминологию и нотацию. В отличие от более старых, где порой от одних обозначений все мозги перекручивает. Но особого смысла в этом нет. С точки зрения содержания математика не зависит от того, кто её излагает. А вот с точки зрения приобретения дальнейших новых знаний и взаимопонимания с другими знающими математику людьми лучше всё-таки читать актуальную современную литературу.
    Ответ написан
    1 комментарий
  • Запуск tor при старте контейнера(на базе Alpine)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    rc-update управляет системными сервисами, которые запускаются процессом init, запускаемым при старте системы. В контейнере же обычно запускается ровно одна программа, никакой инициализации системы с запуском кучи процессов не происходит. Так что надо запустить tor вручную. Ещё иногда внутри контейнеров используют лёгкие системы запуска сервисов типа runit, но ради одного tor разбираться с этим как-то жирно.

    tor нужно запустить в режиме демона, чтобы после его запуска можно было запустить что-то ещё. Например, сделать скрипт, в котором запустить tor и сразу же нужное:

    команда_запуска_tor >/dev/null 2>&1 &
    команда_запуска_моего_приложения


    Этот скрипт положить внутрь контейнера и использовать вместо изначальной команды.

    Но это всё не docker-way. Красиво и по феншую запустить tor отдельным контейнером.
    Ответ написан
  • Хочу узнать внешний IP адрес?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    traceroute может не показать никакого внешнего адреса даже в тех случаях, когда он никак не зарезан. Например, пусть у нас сетка с роутером 192.168.1.0/24, у которого внешний IP-адрес 192.0.1.2 с единственным маршрутом через 192.0.1.1, и мы делаем traceroute, тогда нам отвечают:

    1. Наш хост.
    2. Роутер 192.168.1.1.
    3. Роутер внешней сети 192.0.1.1.
    4....

    Тут нет 192.0.1.2. А ведь и 192.0.1.1 может ответить не этим адресом, а каким-нить 178.24.3.16. А ещё он может вообще не отвечать на ICMP echo request, тогда в трейсе будет пустая строка, или не уменьшать TTL транзитных пакетов, тогда его вообще не будет видно никак.

    Лучше спросить у своих сетевых админов.
    Ответ написан
    Комментировать
  • Asyncpg в Docker - почему может падать с ошибкой No Route To Host, если route точно есть?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно описать доступ из одного контейнера в другой с помощью links в docker-compose.yml. Сейчас доступ режется докером.
    Ответ написан
  • Как docker-compose заставить ходить через прокси?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну, для начала, переменная для wget должна называться http_proxy, а не HTTP_PROXY...

    Потом, лучше её задавать для конкретного контейнера, а не для всего докера. Если это нужно в процессе сборки контейнера - указывать в Dockerfile через ARG (не через ENV).
    Ответ написан
    Комментировать
  • Docker доступ в интернет через другой контейнер?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если нужно завернуть трафик не через обычный шлюз в штатной докер-сети, а через один из контейнеров, то это с помощью системы подпорок и растяжек таки можно сделать.

    1. В конфигурацию контейнеров добавить:

    cap_add:
      - NET_ADMIN


    Это необходимо, так как по умолчанию внутри контейнера нельзя конфигурировать сеть. Ну и redsocks, скорее всего, без этого может не заработать.

    2. В скрипте внутри первого контейнера или в entrypoint добавить прописывание роута:

    ip route replace default via IP_другого_контейнера

    IP второго контейнера лучше зафиксировать. Либо, как вариант, узнавать его через dig (тут контейнер имеет имя router, и нужно через параметр links разрешить к нему доступ):

    ip route add default via `dig +short router`

    3. В контейнере-роутере надо настроить nat и форвардинг. Примерно так:

    sysctl -w net.ipv4.ip_forward=1
    iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -j MASQUERADE


    Тут можно тоже какими-нибудь командами угадать нужную сетку, чтобы не завязываться на фиксированные IP. Например, так:

    network=$(ip route list|grep scope\ link|cut -d ' ' -f 1)


    Ну а вообще такие манипуляции - вряд ли хорошая практика. Лучше сразу закладывать в разрабатываемом софте нативную работу через прокси, если это необходимо.
    Ответ написан
  • Как предотвратить кражу сетевого оборудования?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если товариш так упорствует, то вероятно он из этих, что верят, будто бы антенны чипируют людей коронавирусом. Цели установить где-то ещё у него наверняка нет, выбрасывает, продаёт за 1000 рублей или сдаёт на металлолом.

    Можно заставить УК сменить все замки на чердак, а потом выяснять, кто брал ключи в районе времени кражи. Вряд ли вор будет месяцами выжидать после смены замка.
    Ответ написан
    Комментировать
  • Почему функция не работает?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Правильно так:

    cursor.execute("INSERT INTO clans VALUES (?, ?)", (ctx.author.id, cname))


    Очевидно же, что запрос INSERT INTO clans VALUES (123, ee) не будет работать из-за отсутствия кавычек вокруг ee.
    Ответ написан
  • Как лаконично сформировать SQL-запрос на основе параметров из GET-запроса?

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

    Примерно так:

    $filters = array();
    $values = array();
    
    foreach(array("user_id","city","age","name") as $key) {
      if (isset($_GET[$key])) {
        $filters []= "$key = ?";
        $values []= $_GET[$key];
      }
    }
    
    $sth = $dbh->prepare("SELECT * FROM users WHERE ".implode(" AND ", $filters);
    $sth->execute($values);


    Тут для всех указанных запросов накапливаются условия фильтра и значения в два массива, один затем через AND используется в WHERE, а второй передаётся при выполнении запроса.

    Но реальные сложные проекты так не делают. У них может быть ORM, кэширование и много всякой другой магии, цель которой - увеличить скорость выполнения запросов и уменьшить лишнюю активность. Ну и базы данных могут бычть частично или полностью быть совсем не SQL.
    Ответ написан
    2 комментария