Не надо запускать приложение от root без веских оснований. Ни с nohup, ни без.
nohup делает почти то же самое, что и & после команды. В данном случае от него никакого толку не будет. Если быть точнее, то его поведение довольно похоже на следующую команду:
mariapotapova1998, нет, речь о том, что пользователь через "точку доступа" на стороннем устройстве, на котором запущен прозрачный прокси с невалидным сертификатом, установит вредоносное приложение в формате apk. Это само по себе требует столько телодвижений от пользователя, что довольно трудно представить, что кто-то будет этим заниматься, вместо того, чтобы просто подключиться к мобильной сети или найти другую точку доступа...
mariapotapova1998, теоретически можно чего-нибудь невнятное сделать, если "сидеть на проводе". Например, подсунуть фишинговый сайт с другим сертификатом (невалидным) в надежде что пользователь согласится на него зайти. На практике же это так себе затея. Потому что даже если пользователь согласится на такой сертификат, даже если скачает себе apk злоумышленника, ему ещё надо будет вручную разрешить установку такой apk в настройках... Короче, до этой стадии мало кто доберётся.
Чтобы не особо пиратили, прежде всего надо обеспечивать качество и сервис, хорошую поддержку и разумные цены. Чтобы вот пользователи были даже рады заплатить за хорошо работающий продукт, помогающий им в их деятельности. Тем более, что нишевой продукт чаще всего без активной поддержки очень сложно использовать: что-нибудь глючит, чего-то не хватает...
Ну а ключ можно делать на основе криптографии. Например, берём номер лицензии, тип и дату, шифруем секретным ключом, а в проге зашиваем публичный ключ.
reklamaest, требовать от стороннего решения чего-либо сверх договора может только большой и жырный клиент, коим ваш бизнес явно не является. Так что если и делать, то у себя.
Но я поддержу присутствующих: экономить на комиссиях это тупиковый путь. Использование СБП очень неудобно для пользователя. Можно потерять столько клиентов, что экономию на комиссиях это никак не перекроет.
Вполне нормальная практика перед оплатой показывать короткую страничку в стиле "оплатить через приложение" или "оплатить через сайт". Тогда если один вариант не сработает, пользователь пойдёт через другой.
Можно использовать data url и содержимое картинки кодировать в base64, вставляя в страницу. Но это плохой путь. Правильно класть в файловую систему и в шаблон вставлять ссылку на картинку.
Docik99, чтобы порт не менялся, нужно подключиться к интернету мимо роутера и иметь внешний IP (можно динамический). Иначе роутер в любом случае будет подменять IP на свой, а локальный порт транслировать по таблице conntrack из определённого диапазона (это необходимо, так как одинаковый порт может встретиться у разных клиентов данного маршрутизатора).
Для чего всё это затевается? Даже при внешнем IP локальный порт автоматически выбирается из портов 1024+ или даже 50000+. Наоборот, исходящий пакет от 21 порта будет подозрительно выглядеть.
utsiye, потому что нельзя просто так использовать asyncio и треды одновременно. Либо использовать asyncio только в одном потоке, либо в каждом потоке исхитриться и запустить свой отдельный event loop. Но чаще всего надо просто пересмотреть задачу и обойтись псевдопараллельностью самого asyncio.
capybara123, надо с большим уважением относиться к людям, которые помогают тебе бесплатно в своё свободное время.
А задача решается, например, использованием словаря, где id пользователя выступает в качестве ключа. Хотя в большинстве случаев намного лучше использовать register_next_step_handler (в telebot есть официальный пример в файле step_example.py с демонстрацией принципов его работы).
Александр Тищенко, любой инструмент может быть лучше или хуже только применительно к конкретным условиям и требованиям. Например, для сегмента недорогих решений, где нет постоянного сотрудника на зарплате, который это разрабатывает и поддерживает, нужна популярная и эффективная база, в которой при необходимости за пять минут разберётся любой фрилансер. И тут MySQL несомненно абсолютный лидер.
nohup делает почти то же самое, что и & после команды. В данном случае от него никакого толку не будет. Если быть точнее, то его поведение довольно похоже на следующую команду:
your_command < /dev/null > nohup.out 2>&1 &