air-verse / air

☁️ Live reload for Go apps
GNU General Public License v3.0
16.35k stars 771 forks source link

Duplicate Processes; Port in use #543

Closed ainsleyclark closed 4 months ago

ainsleyclark commented 4 months ago

Using echo for a HTTP server, when I save a file, it looks like two processes are launched and I get a bind:address already in use error

This looks to be the same issue: https://github.com/cosmtrek/air/issues/426

But it was closed, is there a way to solve this? I have tried to set the kill_delay to 10s but no avail.

Many thanks in advance.

air.toml

root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"

[build]
  args_bin = []
  bin = "./tmp/main"
  cmd = "go build -o ./tmp/main ."
  delay = 0
  exclude_dir = ["assets", "tmp", "vendor", "testdata", "node_modules"]
  exclude_file = []
  exclude_regex = ["_test.go", "_templ.go"]
  exclude_unchanged = false
  follow_symlink = false
  full_bin = ""
  include_dir = []
  include_ext = ["go", "tpl", "tmpl", "templ"]
  include_file = []
  kill_delay = "10s"
  log = "build-errors.log"
  poll = false
  poll_interval = 0
  post_cmd = []
  pre_cmd = ["go generate ./..."]
  rerun = false
  rerun_delay = 500
  send_interrupt = false
  stop_on_error = true

[color]
  app = ""
  build = "yellow"
  main = "magenta"
  runner = "green"
  watcher = "cyan"

[log]
  main_only = false
  time = false

[misc]
  clean_on_exit = false

[screen]
  clear_on_rebuild = false
  keep_scroll = true

Output (Debug)

  ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.11.4
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:3000
event: CHMOD         "/views/layouts/base_templ.go"
event: CHMOD         "/views/hello_templ.go"
event: CREATE        "/main.go~"
event: CHMOD         "/main.go"
event: WRITE         "/main.go"
main.go has changed
event: REMOVE        "/main.go~"
main.go has changed
> go generate ./...
main.go has changed
> go generate ./...
trying to kill pid 30616, cmd [/bin/sh -c /tmp/main]
cmd killed, pid: 30616
(✓) Complete [ updates=2 duration=15.481375ms ]
event: CHMOD         "/views/layouts/base_templ.go"
event: WRITE         "/views/layouts/base_templ.go"
event: WRITE|CHMOD   "/views/hello_templ.go"
event: WRITE|CHMOD   "/views/layouts/base_templ.go"
(✓) Complete [ updates=2 duration=16.432875ms ]
event: WRITE|CHMOD   "/views/hello_templ.go"
event: WRITE|CHMOD   "/views/layouts/base_templ.go"
event: WRITE|CHMOD   "/views/hello_templ.go"
event: CHMOD         "/views/hello_templ.go"
event: WRITE         "/views/hello_templ.go"
event: CHMOD         "/views/layouts/base_templ.go"
building...
event: WRITE         "/views/layouts/base_templ.go"
building...
event: CHMOD         "/views/layouts/base_templ.go"
event: WRITE         "/views/layouts/base_templ.go"
event: CHMOD         "/views/hello_templ.go"
event: WRITE         "/views/hello_templ.go"
event: CHMOD         "/main.go"
running...
running process pid 30206

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.11.4
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.11.4
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
{"time":"2024-03-05T12:35:00.081768Z","level":"FATAL","prefix":"echo","file":"main.go","line":"22","message":"listen tcp :3000: bind: address already in use"}
{"time":"2024-03-05T12:35:00.081904Z","level":"FATAL","prefix":"echo","file":"main.go","line":"22","message":"listen tcp :3000: bind: address already in use"}
Process Exit with Code: 1
event: CHMOD         "/views/layouts/base_templ.go"
event: CHMOD         "/views/hello_templ.go"
PabloG6 commented 4 months ago

Having a similar issue, except it happens when u start a program and SIGINT (Ctrl +C) to end it. Doesn't feel like air is killing it's child processes imo.

leandergangso commented 4 months ago

Might help to enable send_interrupt in air.toml?

ainsleyclark commented 4 months ago

Fantastic thank you @leandergangso, that's got it.