Version:
- listmonk: v6.1.0 (1b5e8d3 2026-03-29T13:18:16Z, linux/amd64)
- OS: Almalinux 9
I had a campaign fail: #3031 (comment) - showed 0/2000 sent, after sending to ~327/2000.
I noticed the timestamps in the logs were off. It showed that listmonk restarted right before the campaign was sent. It was a scheduled campaign for 8 am. I had manually restarted listmonk the night before at 11:50 PM, using systemctl daemon-reload && systemctl restart listmonk.
I checked the persistent log file and found:
2026/05/13 08:00:01.396669 manager.go:442: start processing campaign (xxx 2026-05-13 2k)
fatal error: concurrent map writes
goroutine 8714 [running]:
internal/runtime/maps.fatal({0xd1e199?, 0x524?})
/opt/hostedtoolcache/go/1.26.1/x64/src/runtime/panic.go:1181 +0x18
github.com/knadh/listmonk/internal/bounce/webhooks.(*SES).getCert(0x2806dc47c108, {0x2806de857ab0, 0x62})
/home/runner/work/listmonk/listmonk/internal/bounce/webhooks/ses.go:255 +0x3ed
github.com/knadh/listmonk/internal/bounce/webhooks.(*SES).verifyNotif(0x2806dc47c108, {{0x2806e2baca80, 0xa2b}, {0x2806e3f7ccc0, 0x24}, {0x2806dc528b00, 0x158}, {0xd87468, 0x1}, {0x2806de857ab0, ...}, ...})
/home/runner/work/listmonk/listmonk/internal/bounce/webhooks/ses.go:201 +0x37
github.com/knadh/listmonk/internal/bounce/webhooks.(*SES).ProcessBounce(0x2806dc47c108, {0x2806e4246000, 0xe7e, 0x1000})
/home/runner/work/listmonk/listmonk/internal/bounce/webhooks/ses.go:116 +0x267
main.(*App).BounceWebhook(0x2806dc498340, {0xd7ee70, 0x2806e2dfbae0})
/home/runner/work/listmonk/listmonk/cmd/bounce.go:167 +0x2e5
github.com/labstack/echo/v4.(*Echo).add.func1({0xd7ee70, 0x2806e2dfbae0})
/home/runner/go/pkg/mod/github.com/labstack/echo/v4@v4.13.4/echo.go:581 +0x45
main.initHTTPServer.func1.1({0xd7ee70, 0x2806e2dfbae0})
/home/runner/work/listmonk/listmonk/cmd/init.go:897 +0x59
github.com/labstack/echo/v4.(*Echo).ServeHTTP(0x2806dc894248, {0xd6cbb0, 0x2806dcf122d0}, 0x2806e30feb40)
/home/runner/go/pkg/mod/github.com/labstack/echo/v4@v4.13.4/echo.go:668 +0x323
net/http.serverHandler.ServeHTTP({0xd69a10?}, {0xd6cbb0?, 0x2806dcf122d0?}, 0x6?)
/opt/hostedtoolcache/go/1.26.1/x64/src/net/http/server.go:3311 +0x8e
net/http.(*conn).serve(0x2806e32f0c60, {0xd6e950, 0x2806dc66c3c0})
/opt/hostedtoolcache/go/1.26.1/x64/src/net/http/server.go:2073 +0x650
created by net/http.(*Server).Serve in goroutine 10
/opt/hostedtoolcache/go/1.26.1/x64/src/net/http/server.go:3464 +0x485
2026/05/13 08:00:11.903886 main.go:106: v6.1.0 (1b5e8d38 2026-03-29T13:18:16Z, linux/amd64)
2026/05/13 08:00:11.904068 init.go:188: reading config: /xxx/listmonk/config.toml
2026/05/13 08:00:11.904331 init.go:328: connecting to db: localhost:5555/listmonk
2026/05/13 08:00:12.117413 init.go:287: loading static files from: /xxx/listmonk/static
2026/05/13 08:00:12.221031 init.go:749: media upload provider: filesystem
2026/05/13 08:00:12.221544 init.go:657: initialized email (SMTP) messenger: xxx@email-smtp.us-west-1.amazonaws.com
⇨ http server started on 127.0.0.1:9000
2026/05/13 08:00:17.279398 manager.go:442: start processing campaign (xxx 2026-05-13 2k)
2026/05/13 08:00:17.293153 pipe.go:231: campaign (xxx 2026-05-13 2k) finished
So it started the campaign, errored, then said it started the same campaign again and finished it, but from the timestamps, it doesn't appear that it actually started it again.
Version:
I had a campaign fail: #3031 (comment) - showed 0/2000 sent, after sending to ~327/2000.
I noticed the timestamps in the logs were off. It showed that listmonk restarted right before the campaign was sent. It was a scheduled campaign for 8 am. I had manually restarted listmonk the night before at 11:50 PM, using
systemctl daemon-reload && systemctl restart listmonk.I checked the persistent log file and found:
So it started the campaign, errored, then said it started the same campaign again and finished it, but from the timestamps, it doesn't appear that it actually started it again.