chore(agent/agentscripts): log command cancellation (#16324)

Relates to https://github.com/coder/internal/issues/329

It's currently unclear where the SIGHUP came from; adding some logging
to make it more clear if it happens again in future.

---------

Co-authored-by: Danny Kopping <danny@coder.com>
This commit is contained in:
Cian Johnston
2025-01-29 13:37:43 +00:00
committed by GitHub
parent d38974405d
commit e8e16c9404
3 changed files with 11 additions and 3 deletions

View File

@ -290,7 +290,7 @@ func (r *Runner) run(ctx context.Context, script codersdk.WorkspaceAgentScript,
cmd = cmdPty.AsExec() cmd = cmdPty.AsExec()
cmd.SysProcAttr = cmdSysProcAttr() cmd.SysProcAttr = cmdSysProcAttr()
cmd.WaitDelay = 10 * time.Second cmd.WaitDelay = 10 * time.Second
cmd.Cancel = cmdCancel(cmd) cmd.Cancel = cmdCancel(ctx, logger, cmd)
// Expose env vars that can be used in the script for storing data // Expose env vars that can be used in the script for storing data
// and binaries. In the future, we may want to expose more env vars // and binaries. In the future, we may want to expose more env vars

View File

@ -3,8 +3,11 @@
package agentscripts package agentscripts
import ( import (
"context"
"os/exec" "os/exec"
"syscall" "syscall"
"cdr.dev/slog"
) )
func cmdSysProcAttr() *syscall.SysProcAttr { func cmdSysProcAttr() *syscall.SysProcAttr {
@ -13,8 +16,9 @@ func cmdSysProcAttr() *syscall.SysProcAttr {
} }
} }
func cmdCancel(cmd *exec.Cmd) func() error { func cmdCancel(ctx context.Context, logger slog.Logger, cmd *exec.Cmd) func() error {
return func() error { return func() error {
logger.Debug(ctx, "cmdCancel: sending SIGHUP to process and children", slog.F("pid", cmd.Process.Pid))
return syscall.Kill(-cmd.Process.Pid, syscall.SIGHUP) return syscall.Kill(-cmd.Process.Pid, syscall.SIGHUP)
} }
} }

View File

@ -1,17 +1,21 @@
package agentscripts package agentscripts
import ( import (
"context"
"os" "os"
"os/exec" "os/exec"
"syscall" "syscall"
"cdr.dev/slog"
) )
func cmdSysProcAttr() *syscall.SysProcAttr { func cmdSysProcAttr() *syscall.SysProcAttr {
return &syscall.SysProcAttr{} return &syscall.SysProcAttr{}
} }
func cmdCancel(cmd *exec.Cmd) func() error { func cmdCancel(ctx context.Context, logger slog.Logger, cmd *exec.Cmd) func() error {
return func() error { return func() error {
logger.Debug(ctx, "cmdCancel: sending interrupt to process", slog.F("pid", cmd.Process.Pid))
return cmd.Process.Signal(os.Interrupt) return cmd.Process.Signal(os.Interrupt)
} }
} }