hashicorp/nomad · error
QEMU driver can't signal commands
Error message
QEMU driver can't signal commands
What it means
Unconditional error from the QEMU driver's SignalTask: QEMU tasks run full VMs, and the driver provides no mechanism to forward signals into the guest, so any signal request is rejected.
Source
Thrown at drivers/qemu/driver.go:810
return handle.TaskStatus(), nil
}
func (d *Driver) TaskStats(ctx context.Context, taskID string, interval time.Duration) (<-chan *drivers.TaskResourceUsage, error) {
handle, ok := d.tasks.Get(taskID)
if !ok {
return nil, drivers.ErrTaskNotFound
}
return handle.exec.Stats(ctx, interval)
}
func (d *Driver) TaskEvents(ctx context.Context) (<-chan *drivers.TaskEvent, error) {
return d.eventer.TaskEvents(ctx)
}
func (d *Driver) SignalTask(_ string, _ string) error {
return fmt.Errorf("QEMU driver can't signal commands")
}
func (d *Driver) ExecTask(_ string, _ []string, _ time.Duration) (*drivers.ExecTaskResult, error) {
return nil, fmt.Errorf("QEMU driver can't execute commands")
}
// GetAbsolutePath returns the absolute path of the passed binary by resolving
// it in the path and following symlinks.
func GetAbsolutePath(bin string) (string, error) {
lp, err := exec.LookPath(bin)
if err != nil {
return "", fmt.Errorf("failed to resolve path to %q executable: %v", bin, err)
}
return filepath.EvalSymlinks(lp)
}
View on GitHub (pinned to 482b49bf1a)
Solutions
- Remove signal usage from the QEMU task configuration/job spec
- Handle the signal inside the guest VM instead of via the Nomad driver
- Check driver capabilities via TaskCapabilities/DriverSignal handling before signaling
Example fix
// before err := driver.SignalTask(taskID, "SIGUSR1") // QEMU driver can't signal commands // after // deliver the signal inside the VM, e.g. via SSH/exec into the guest
Defensive patterns
Strategy: validation
Validate before calling
// Go: gate on driver support before signaling
if driverName == "qemu" {
return fmt.Errorf("signaling unsupported for qemu tasks")
} Try / catch
if err := drv.SignalTask(id, sig); err != nil && strings.Contains(err.Error(), "can't signal") {
// route signal inside guest VM instead
} Prevention
- Never configure signal stanzas on QEMU tasks
- Consult driver capability docs before calling SignalTask
- Use guest-internal mechanisms (SSH, QEMU guest agent) for signals
When it happens
Trigger: Any call to Driver.SignalTask(taskID, signal) on the QEMU driver, e.g. Nomad's signal task API or a template change triggering a dynamic signal.
Common situations: Job specs with a signal stanza on a QEMU task; template siphon signals; tooling that generically signals all task drivers.
Related errors
- QEMU driver can't execute commands
- QEMU Guest Agent socket is unsupported on the Windows platfo
- monitorPath not set
- executor Shutdown failed: %v
- cannot destroy running task
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/cc4ac670eca63dc0.
Report an issue: GitHub.