
Daniel
28.02.2018
11:58:52
а! я неоднократно пробовал показывать. не понимают-с. дикари-с.

Alexey
28.02.2018
11:58:59

Vladimir
28.02.2018
11:59:20

Daniel
28.02.2018
12:00:26

Google

Alexey
28.02.2018
12:01:33
Первая версия

m
28.02.2018
12:06:12
В het/http есть функция плавного завершения https://golang.org/pkg/net/http/#Server.Shutdown . Как бы предполагается, что мы хотим закончить обслуживать все имеющиеся соединения и только потом выйти. Но вот вопрос: как при этом запустить другой процесс, который бы принимал новые соединения?
Есть ли либы, позволяющие запускаться на том же порту новому процессу, а старому ещё долго (часы) продолжать обслуживать старые соединения?

Илья
28.02.2018
12:06:13
так у вас транзакции не было
?

John
28.02.2018
12:07:19

Daniel
28.02.2018
12:07:44

m
28.02.2018
12:08:24

Alexey
28.02.2018
12:08:57

Andrey
28.02.2018
12:09:08

Alexey
28.02.2018
12:09:31

Andrey
28.02.2018
12:09:42
> Есть ли либы, позволяющие запускаться на том же порту новому процессу, а старому ещё долго (часы) продолжать обслуживать старые соединения?
такого нет

Google

John
28.02.2018
12:10:02

Илья
28.02.2018
12:10:24

Andrey
28.02.2018
12:11:42

m
28.02.2018
12:11:43
там сокеты по их дескриптору передаются наверное.

Daniel
28.02.2018
12:12:15
а вот скажите - как вы собираетесь graceful утилизировать в век keepalive

m
28.02.2018
12:12:40

Daniel
28.02.2018
12:12:58
так не закроется же соединение никогда

m
28.02.2018
12:13:21
Вообще-то они закрываются.

Daniel
28.02.2018
12:13:34
откуда ты знаешь?

m
28.02.2018
12:13:43
проверял ?

Daniel
28.02.2018
12:14:19
я вот не проверял, но письма от страдальцев, у которых на reload nginx висит часами, читал

m
28.02.2018
12:14:35
часами != никогда.

Daniel
28.02.2018
12:14:59
по мне, так часами === никогда

Andrey
28.02.2018
12:15:01
за время жизни вселенной точно закроется

m
28.02.2018
12:15:32
при релоаде nginx-у SIGHUP посылается и всё. так что управление возвращается в консоль, если что.

Daniel
28.02.2018
12:15:48
спасибо, кэп
но от этого только хуже

m
28.02.2018
12:16:18
В реальности это юзеры, которые активно использую сайт. Как уйдут, так соединение и закроется.

Sergey
28.02.2018
12:16:23

Google

m
28.02.2018
12:16:51

Daniel
28.02.2018
12:16:53

m
28.02.2018
12:17:29
ну прибивай воркеров через час.

Daniel
28.02.2018
12:17:47
почему не сразу?

m
28.02.2018
12:18:17
сразу плохо: может прилететь пол страницы юзеру.

Daniel
28.02.2018
12:18:34
и так может, только ты еще час ждал

m
28.02.2018
12:19:25
спор из области, что курить вредно, но я же курю и жив.

Daniel
28.02.2018
12:19:37
не, я не спорю
я вопрос задаю
и пока ответы все какие-то невнятные :)

Igor
28.02.2018
12:20:13
http://nginx.org/en/docs/ngx_core_module.html#worker_shutdown_timeout

Daniel
28.02.2018
12:20:50
еще раз - почему не прибить воркера сразу? зачем ждать?

m
28.02.2018
12:22:05
ответ: чтобы юзер, качающий 100500 мегабайтный файл мог не нажимать на его перезакачку в браузере.
а недогруженный css или js или картинка делают сайт некрасивым.
и браузер не пытается из докачать, кстати.

Daniel
28.02.2018
12:23:56
раньше он сам бы соединение закрыл по окончании
но сегодня-то - нет, не закроет

m
28.02.2018
12:25:13
браузер закроет соединени.

Google

m
28.02.2018
12:25:30
как докачает и подождёт 10 минут вроде

Alexander
28.02.2018
12:25:39
keepalive соединение не живёт бесконечно. Обычно закрывается в течение минуты после последней передачи.

Daniel
28.02.2018
12:26:03

m
28.02.2018
12:26:15
Всё верно.

Sergey
28.02.2018
12:26:19

Alexander
28.02.2018
12:27:12
Тогда плохо. Но это не тот вариант, что со скачиваеним файла в 100500 мегабайт.
И вообще такое надо на вебсокетах делать :)

Daniel
28.02.2018
12:27:46
с вебсокетами та же херня

Admin
ERROR: S client not available

Илья
28.02.2018
12:28:43
в вебсокетах хотя бы можно на уровне протокола сказать - restart
со стороны сервера

Alexander
28.02.2018
12:28:50
да. Используйте load balancer'ы для переключения на живую и авто-восстановление вебсокетов для кикнутых клиентов

Daniel
28.02.2018
12:29:11
это да, но уже далеко от graceful
можно еще keepalive поддерживать только на балансере, а на бекендах обойтись без него
тогда на бекендах будет работать graceful
но это расход сокетов втрое и лейтенси повышенная

Andrew
28.02.2018
13:17:52
Коллеги, посоветуйте. Нужно запустить через конвейер от трёх и более программ. Если самому соединять их через io.Pipe, получается уж очень громоздко. Есть ли либа или способ упростить данный процесс?

Andrey
28.02.2018
13:33:33
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()
вроде не очень громоздко
cmd - псевдотип, для наглядности

Google

m
28.02.2018
14:28:14
Написал смену юзера и группы, но что-то как был процесс под рутом, так и остался. Что я делаю не так?
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
28.02.2018
14:29:15
скажи - ты забыл, что смена юзера нормально не работает в go?

m
28.02.2018
14:29:30
я и не знал

Daniel
28.02.2018
14:29:39
к тому моменту, ак ты его менять пытаешься, несколько тредов уже запущены
и им никто ничего не сменит

m
28.02.2018
14:30:26
был уверен, что оно к процессу относится, а не к тредам...
а есть какие-то варианты обхода этого?

Daniel
28.02.2018
14:31:17
а тред на линуксе - это процесс
нет
запускаться сразу от нужного пользователя - вот и все
или под рутом в докере

m
28.02.2018
14:32:06
ох... Ну почему опять надо что-то городить... устал уже. ?

Daniel
28.02.2018
14:32:35
https://github.com/golang/go/issues/1435 - ссылка про это

John
28.02.2018
14:32:38

Nik
28.02.2018
14:32:54

Daniel
28.02.2018
14:33:09
а как это сделать?

Nik
28.02.2018
14:33:36
Я был уверен, что на старте, пока я не сделал go func у меня один тред

m
28.02.2018
14:34:06
тред то основной, но горутина всегда может перескочить в другой тред.

Nik
28.02.2018
14:34:17
а другого треда то и не существует
он пока один