{"record":{"id":"d781455860cc70a6","repo":"hashicorp/nomad","slug":"error-unknown-signal-given-for-shutdown-s-d78145","errorCode":null,"errorMessage":"error unknown signal given for shutdown: %s","messagePattern":"error unknown signal given for shutdown: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/shared/executor/executor_linux_cgo.go","lineNumber":375,"sourceCode":"\tstatus, err := l.container.Status()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdefer l.container.Destroy()\n\n\tif status == libcontainer.Stopped {\n\t\treturn nil\n\t}\n\n\tif grace > 0 {\n\t\tif signal == \"\" {\n\t\t\tsignal = \"SIGINT\"\n\t\t}\n\n\t\tsig, ok := signals.SignalLookup[signal]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"error unknown signal given for shutdown: %s\", signal)\n\t\t}\n\n\t\t// Signal initial container processes only during graceful\n\t\t// shutdown; hence `false` arg.\n\t\terr = l.container.Signal(sig)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// nosemgrep\n\t\tselect {\n\t\tcase <-l.userProcExited:\n\t\t\treturn nil\n\t\tcase <-time.After(grace):\n\t\t\tif err := l.container.Signal(os.Kill); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}","sourceCodeStart":357,"sourceCodeEnd":393,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/drivers/shared/executor/executor_linux_cgo.go#L357-L393","documentation":"LibcontainerExecutor.Shutdown looks up the requested signal name in signals.SignalLookup. If the configured kill signal string (from the task's kill_signal or driver config) is not a known signal name, Shutdown returns this error instead of signaling the container, so the task never receives a graceful shutdown.","triggerScenarios":"Shutdown called (via catchSignals on client shutdown or task Stop) with a signal string not present in signals.SignalLookup — e.g. a misspelled or unsupported kill_signal value.","commonSituations":"Typo in job spec kill_signal (e.g. \"SIGQUIT\" on a build without it, \"sigterm\" casing issues, or plain \"TERM\"); task config carrying an OS-unsupported signal name; misconfigured driver templates injecting an invalid signal value.","solutions":["Set kill_signal in the task to an exact, supported name such as \"SIGTERM\" or \"SIGINT\"","Check the signal table (signals.SignalLookup) for valid names supported on the target OS/arch","Remove any stray whitespace or custom signal aliases from the task/driver config","If an app needs an unusual signal, use a supported one plus an in-app handler instead"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var validSignals = map[string]bool{\"SIGINT\": true, \"SIGTERM\": true, \"SIGQUIT\": true, \"SIGHUP\": true}\nif !validSignals[strings.ToUpper(killSignal)] {\n    return fmt.Errorf(\"kill_signal %q not supported; use SIGINT or SIGTERM\", killSignal)\n}","typeGuard":null,"tryCatchPattern":"if err := executor.Shutdown(); err != nil && strings.Contains(err.Error(), \"unknown signal given for shutdown\") {\n    log.Printf(\"bad kill_signal in task config: %v — fix job spec\", err)\n}","preventionTips":["Use exact signal names (SIGTERM, SIGINT) in kill_signal configuration","Cross-check signal names against signals.SignalLookup for the target OS","Avoid hand-written signal aliases or values from templates"],"tags":["signals","configuration","shutdown","executor"],"backgroundTag":"unknown-signal-name","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}