У меня проблемы с сервисом, о котором я пишу. У меня есть запись в системный журнал следующим образом: http://technosophos.com/2013/09/14/using-gos-built-logger-log-syslog.html
но когда я убиваю службу через CTRL-C, что-то оставляет открытыми соединения с syslogd. Я все равно не вижу, чтобы начать очистку. Что мне не хватает
например syslog.Writer.Close()
кажется мне недоступным, но я могу сказать, что очистки не происходит. Я вижу соединения, застрявшие в состоянии CLOSE_WAIT, и мой syslogd начинает зависать и отказываться от сотрудничества.
пример:
package main
import (
"github.com/davecgh/go-spew/spew" // DEBUG
"log"
"log/syslog"
"os"
"os/signal"
"syscall"
)
func main() {
logWriter, err := syslog.New(syslog.LOG_NOTICE, "mybrokenprog")
spew.Dump(logWriter) // DEBUG
spew.Dump(err) // DEBUG
if err == nil {
log.SetOutput(logWriter)
}
chansigs := make(chan os.Signal, 1)
signal.Notify(chansigs, os.Interrupt, syscall.SIGTERM, syscall.SIGKILL)
log.Print("writing to syslog. waiting for shutdown signal")
for {
sig := <-chansigs // we just wait here for a signal to shutdown
log.Print("signal received...shutting down")
logWriter.Close() // but this throws the panic excerpted below
if sig == os.Interrupt {
os.Exit(0)
}
os.Exit(1)
}
}
РЕДАКТИРОВАТЬ: приведенный выше код устраняет проблему. см. комментарии. Перезагрузка для очистки застрявших подключений к системному журналу устранила проблему. Как только они там, они настойчивы. Даже инструкции OS X по перезапуску syslogd не помогли. РЕДАКТИРОВАТЬ: это была ошибка: паника: ошибка времени выполнения: неверный адрес памяти или разыменование нулевого указателя [сигнал 0xb code = 0x1 addr = 0x0 pc = 0xcb4fe]
горутина 1 [работает]: log/syslog.(*Writer).Close(0x0, 0x0, 0x0) /usr/local/Cellar/go/1.5.1/libexec/src/log/syslog/syslog.go:177 + 0x10e основной.главный(0x3)
Я не сомневаюсь, что делаю это неправильно. Просто новичок, который еще не видит, где.
syslog.Writer.Close()
недоступен? Вы явно создаетеsyslog.Writer
в ссылке, которую вы разместили. - person JimB   schedule 31.10.2015logWriter
этоnil
, когда вы звонитеClose()
. - person JimB   schedule 31.10.2015