
Dmitry
08.02.2017
11:56:32
¯\_(ツ)_/¯
комьюнити

Denis
08.02.2017
11:58:55
на обычных прилагах не скажется, а вот на всяких акторных системах с высокой пропускной способносью вполне

Dmitry
08.02.2017
12:00:01
ну, мессаджинг через http такой мессаджинг..

Google

Dmitry
08.02.2017
12:00:06
кафки нету чтоль?
ну да ладно, к черту холивар :)
опять же высокопроизводительные системы могут остаться на 1.7 :))

Denis
08.02.2017
12:01:09
на легаси проектах думаю есть мосты) хотя там на другой стороне пхп, лол

i
08.02.2017
12:02:14
у меня php с go через очереди redis взаимодействуют

dypa
08.02.2017
12:02:15
у всех бывает право на неудачный коммит

Denis
08.02.2017
12:03:23
да там с большего всех возмутил ответ, чем регрессия
линукс ядро каждый год регрессирует на несколько процентов

Dmitry
08.02.2017
12:04:13
блоатваре
а что с ответом не так? приняли, поблагодарили, сказали что пофиксят. В соответствии с релизной политикой после RC никаких фиксов кроме документации
https://github.com/golang/go/issues/18964#issuecomment-278308719
ну блин, прогроммисты ж зачастую с "так себе" социальными скилами

dypa
08.02.2017
12:12:56

Google

Dmitry
08.02.2017
12:13:00
кто-нибудь использовал gocron?

Denis
08.02.2017
12:13:34
?
думаю на задворках его повседневных мыслей все так и было :)
кто-то кстати писал пост что з.ебали хейтить OS разработчиков

Vadim
08.02.2017
12:16:19
небольшая туса https://twitter.com/AvitoTech/status/829301223207665665

Dmitry
08.02.2017
12:17:36
неужели никому не приходилось шедулить таски в go ?
:(9

Антон
08.02.2017
12:21:12

Dmitry
08.02.2017
12:21:32
а это внешнее приложение чем шедулится? :)

Антон
08.02.2017
12:21:56
у нас это таймеры systemd

Dmitry
08.02.2017
12:22:23
ясн.. просто мне еще нужно знать "время до" события. и гокрон все это умеет
синхронизировать расписание между системд и го совсем уж зашквар

Антон
08.02.2017
12:23:50

Dmitry
08.02.2017
12:24:07
эм? пошел гуглить.

Антон
08.02.2017
12:24:19
root@unassigned:~# systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Ср 2017-02-08 12:25:00 UTC 54s left Ср 2017-02-08 12:20:04 UTC 4min 0s ago ad-clean-sessions.timer ad-clean-sessions.service
типа того

Dmitry
08.02.2017
12:24:51
ну а в приложение назад это как ?:) парсить..

Антон
08.02.2017
12:25:34
ну видимо) В твоём случае да, подумать надо)

Dmitry
08.02.2017
12:26:02
"таймеры системд" - сложна
да я гокрон прикрутил ,но он периодически с ума сходит

Google

Dmitry
08.02.2017
12:26:33
причем на проде, а локально воспроизвести не получается
думал что как-то связано с часовыми поясами
двигал туда сюда, туда сюда , no cigar

Антон
08.02.2017
12:27:24
во во. Демоны надо делать как можно проще, с как можно меньшим кол-вом фоновых задач. Их дебажить сложно
а в виде таймера - ну зафейлилось. Посмотрел лог. Можно ещё раз запустить, вне таймера

Dmitry
08.02.2017
12:28:21
надеюсь тому кто придумал часовые пояса отдельную сковородку выделили.
у меня обратная ситуация, лишний раз запускает

Антон
08.02.2017
12:30:39
надо посмотреть, чё он (gocron) внутрях юзает. Вообще если абсолютное время не важно, то лучше юзать линуксовый monotonic time

Dmitry
08.02.2017
12:31:03
да он вроде простой как палка
for i := 0; i < s.size; i++ {
if s.jobs[i].shouldRun() {
runnableJobs[n] = s.jobs[i]

Антон
08.02.2017
12:31:34
тогда легко могут быть проблемы, если у тебя по ntp синхронизация прошла, например

Dmitry
08.02.2017
12:31:45
func (j *Job) shouldRun() bool {
return time.Now().After(j.nextRun)
}

Dmitry
08.02.2017
12:31:54
та у меня между тасками часовые интервалы
он просто при инциализации почему-то решает иногда и только в проде, тригернуть таску которая должна быть только через 30 минут
хотя по этому коду он должен каждый раз запускать последний джоб думая что он его проспал
а, нет.. поле nextRun инциализируется тут https://github.com/jasonlvhit/gocron/blob/master/gocron.go#L158
видимо гдесь есть какой-то баг.

i
08.02.2017
12:35:31
я gocron использую
// каждый день перезагружать список вокзалов
log.Println("Перезагрузка списка вокзалов каждый день в", dyc.Config.ReloadAt)
gocron.Every(1).Day().At(dyc.Config.ReloadAt).Do(func() { dyc.reloadChan <- true })
gocron.Start()
Вот и всё использование

Google

Dmitry
08.02.2017
12:36:43
да да. именно так
но у меня при старте приложения иногда оно срабатывает
var mskZone, err = time.LoadLocation("Europe/Moscow")
if err != nil {
fmt.Println("TZ change error: ", err)
}
var scheduler = gocron.NewScheduler()
gocron.ChangeLoc(mskZone)
scheduler.Every(1).Day().At("00:00").Do(Compute)
<- scheduler.Start()
вот и всё использование

i
08.02.2017
12:38:54
Баг Шрёдингера

Dmitry
08.02.2017
12:39:29
просто тебе без разницы сработает оно или нет лишний раз, наверное..
ну перегрузится лишний раз :) а у меня таску так нельзя дергать

i
08.02.2017
12:39:51
я ни разу не видел чтобы оно при старте работало

Dmitry
08.02.2017
12:39:52
надо экзактли уанс

Admin
ERROR: S client not available

Dmitry
08.02.2017
12:40:01
дык и я локально не видел
а в проде стреляет
:-\

Denis
08.02.2017
12:40:08
https://github.com/golang/go/issues/12914
go не умеет в monotonic time

Dmitry
08.02.2017
12:40:35
да там часовые интервалы, не может же оно часы переводить на полчаса вперед
единственное различие между продом и локальной машиной — часовой пояс

Denis
08.02.2017
12:41:58
пиши логи
каждый раз на срабатывание

Dmitry
08.02.2017
12:42:06
с чем?
так и делаю

Google

Denis
08.02.2017
12:42:10
в проде

Dmitry
08.02.2017
12:42:13
и вижу что срабатывает на старте
потом все ровно

i
08.02.2017
12:43:02
а gocron.ChangeLoc(mskZone) часовой пояс не шудлера поумолчанию ставит?

Dmitry
08.02.2017
12:43:28
ну у меня он там всего один
у самого шедулера способ передвинуть tz я не вижу
локально пытался ставить ему Asia/Krasnoyarsk
думал что как-то перепрыгивает через часы и глючит
можт не в ту сторону переводил..
надо GMT поставить.
нет.
voodoo magic.

Антон
08.02.2017
12:54:09
почитал код. Честно - если тебе нужно шедулить по дельтам но точно (типа через каждые n сек) то лучше не юзать эту библиотеку. А вот если тебе надо что то вроде: запускать, когда на часах компа такое то время, то пойдёт.
а на продакшене ты как запускаешь?

Dmitry
08.02.2017
12:57:43
мне нужно "в 12 ночи"
запускаю просто сейчас отдельный скрипт starter.go который как ты говоришь RPC шит основной процесс
все что есть в этом скрипте - расписание, джойн на канале и чендж зоны
всё.

Den
08.02.2017
12:58:28
Всем привет. Есть ли готовые решения перезаписи файла читаем кластер изменяем перезаписываем в то же место?

Антон
08.02.2017
12:59:02
всё.
я имею в виду, как демон запускаешь? Из под systemd или ещё что?

Dmitry
08.02.2017
12:59:18
да просто go run starter.go сейчас запускаю

Антон
08.02.2017
13:02:48
думаю проблема здесь. loc не передаётся: https://github.com/jasonlvhit/gocron/blob/master/gocron.go#L168