Michael
как докачает и подождёт 10 минут вроде
Alexander
keepalive соединение не живёт бесконечно. Обычно закрывается в течение минуты после последней передачи.
Daniel
как докачает и подождёт 10 минут вроде
если новый запрос в него не отправит
Michael
Всё верно.
Alexander
Тогда плохо. Но это не тот вариант, что со скачиваеним файла в 100500 мегабайт.
Alexander
И вообще такое надо на вебсокетах делать :)
Daniel
с вебсокетами та же херня
Илья
в вебсокетах хотя бы можно на уровне протокола сказать - restart
Илья
со стороны сервера
Alexander
да. Используйте load balancer'ы для переключения на живую и авто-восстановление вебсокетов для кикнутых клиентов
Daniel
это да, но уже далеко от graceful
Daniel
можно еще keepalive поддерживать только на балансере, а на бекендах обойтись без него
Daniel
тогда на бекендах будет работать graceful
Daniel
но это расход сокетов втрое и лейтенси повышенная
Anonymous
Коллеги, посоветуйте. Нужно запустить через конвейер от трёх и более программ. Если самому соединять их через io.Pipe, получается уж очень громоздко. Есть ли либа или способ упростить данный процесс?
Andrey
type cmd ... func (* cmd) Exec ... commands := []cmd{"ls", "grep .txt", "sort"} for i, _ := range commands[:len(commands)-1] { r, w := io.Pipe() commands[i].Stdout = w commands[i+1].Stdin = r commands[i].Exec() } commands[len(commands)-1].Exec()
Andrey
вроде не очень громоздко
Andrey
cmd - псевдотип, для наглядности
Michael
Написал смену юзера и группы, но что-то как был процесс под рутом, так и остался. Что я делаю не так? func setUserAndGroup(u, g string) error { if u != "" { uid, err := strconv.Atoi(u) if err == nil { return err } err = syscall.Setuid(uid) if err == nil { return err } } if g != "" { gid, err := strconv.Atoi(g) if err == nil { return err } err = syscall.Setgid(gid) if err == nil { return err } } return nil }
Daniel
скажи - ты забыл, что смена юзера нормально не работает в go?
Michael
я и не знал
Daniel
к тому моменту, ак ты его менять пытаешься, несколько тредов уже запущены
Daniel
и им никто ничего не сменит
Michael
был уверен, что оно к процессу относится, а не к тредам...
Michael
а есть какие-то варианты обхода этого?
Daniel
а тред на линуксе - это процесс
Daniel
нет
Daniel
запускаться сразу от нужного пользователя - вот и все
Daniel
или под рутом в докере
Michael
ох... Ну почему опять надо что-то городить... устал уже. 😊
Daniel
https://github.com/golang/go/issues/1435 - ссылка про это
Nik
https://github.com/golang/go/issues/1435 - ссылка про это
а если запускать из оснновного терда на старте
Daniel
а как это сделать?
Nik
Я был уверен, что на старте, пока я не сделал go func у меня один тред
Michael
тред то основной, но горутина всегда может перескочить в другой тред.
Nik
а другого треда то и не существует
Nik
он пока один
Michael
ничего подобного. они есть
Nik
значит я не шарю. Пойду почитаю
Michael
GC, например, там работает.
Michael
Хотя можно сделать LockOsThread()
Alexander
А прога не может сама себя перезапустить через sudo, если обнаружила, что запущена из под рута?
Anonymous
Наоборот стоит
На самом деле нет. Программа должна делать что-то одно, а вот лезть в sudo - аще внезапно и не ожиданно
Aleksey
Если от рута, то не sudo, а su
Aleksey
Но su у рута есть и он от нужного пользователя стартанёт
Aleksey
А вообще уже везде есть systemd
Daniel
делать все это должен супервизор, а не ваше приложение
Michael
боль
Anonymous
А вообще уже везде есть systemd
На самом деле нет 😁
Aleksey
На самом деле нет 😁
Можно и по другому от нужного пользователя стартануть
Anonymous
но это должен делать пользователь/супервизор
Anonymous
но никак не твой сервис
Aleksey
но никак не твой сервис
Но ругаться на запуск под рутом нужно
Anonymous
Но ругаться на запуск под рутом нужно
в целом, запускать сервисы под рутом - не лучшая идея
Anonymous
но показать ворниг/фатал - да, можно
Alexander
Я сейчас скажу крамолу, но для массового продукта автоматический перезапуск, если возможен, все равно лучше, чем просто ругаться или показывать предупреждения. Потому что люди ленивы и хотят чтобы оно "просто работало"
Anonymous
для таких целей и придумали супервизор же, ну :)
Aleksey
Я сейчас скажу крамолу, но для массового продукта автоматический перезапуск, если возможен, все равно лучше, чем просто ругаться или показывать предупреждения. Потому что люди ленивы и хотят чтобы оно "просто работало"
Проверить есть ли пользователь, если нет создать, проверить возможные варианты запуска, предложить настроить, и настроить, с информацией как запускать
Alexander
супервизор еще настроить нужно, а это далеко от "просто работает"
Aleksey
Еще ридми есть для этого
Daniel
супервизор еще настроить нужно, а это далеко от "просто работает"
супервизор по-любому надо настроить, не руками же "просто работает" запускать
Roman
подкрутил skeleton, рус.яз. шрифт, node-sass, пример для гошана (с гогеном). может кому пригодится для простенького симпатичного UI в легких сервисах. https://github.com/covrom/Skeleton-Sass
Alexander
Просто для примера, я когда увидел, как в PHP-шном composer сделан обход xdebug (потому что с дебаггером он сильно медленее), моя первая мысль "какого .... это уродство тут?". А потом подумал еще и понял, что это некоторое неудобство программиста, но нужно ради комфорта конечного пользователя.
Elena
Простите меня, люди которые читают и pro.go тоже 🙂 Но! Хочу напомнить, что сегодня последний день, когда можно купить билет на конференцию GopherCon Russia за 7000 рублей. В программе Brad Fitzpatrick и Дмитрий Вьюков из Google, Jessie Frazelle, ведущий подкаста Go Time Brian Ketelsen, Ashley McNamara и спикеры из Gett, Вконтакте, Avito, Badoo, Mail.ru и не только! 500 участников, 2 потока докладов и афтепати до победного конца! https://www.gophercon-russia.ru/
Mr
видео будет?
Elena
да, через пару недель послле конференции все выложим в открытый доступ
Michael
А вообще уже везде есть systemd
Линукс - это везде? Я уж молчу о том, как оно размазывает информацию о причинах фейла по куче мест. В начале хрен поймёшь, что же пошло не так.
Elena
Афтепати тоже выложите? 😏
Сорян, непонятно как )
Elena
ненене, конфиденциальность подвыпивших гоферов превыше всего. Фото и видеосъемка на пати запрещены 🙂