cloudflare/cloudflared · error

error copying stderr from %s to file %s: %w

Error message

error copying stderr from %s to file %s: %w

What it means

PipeCommandOutputToFile runs a diagnostic command and streams its stderr into a file. This error wraps any failure of io.Copy from the command's stderr pipe to the output file, with the command and target file names for context.

Source

Thrown at diagnostic/log_collector_utils.go:50

			"error running command '%s': %w",
			command.String(),
			err,
		)
	}

	_, err = io.Copy(outputHandle, stdoutReader)
	if err != nil {
		return nil, fmt.Errorf(
			"error copying stdout from %s to file %s: %w",
			command.String(),
			outputHandle.Name(),
			err,
		)
	}

	_, err = io.Copy(outputHandle, stderrReader)
	if err != nil {
		return nil, fmt.Errorf(
			"error copying stderr from %s to file %s: %w",
			command.String(),
			outputHandle.Name(),
			err,
		)
	}

	if err := command.Wait(); err != nil {
		return nil, fmt.Errorf(
			"error waiting from command '%s': %w",
			command.String(),
			err,
		)
	}

	return NewLogInformation(outputHandle.Name(), true, false), nil
}

View on GitHub (pinned to 2253eeeb25)

Solutions

  1. Check free disk space in os.TempDir() target filesystem
  2. Re-run the diagnostic collection command
  3. Inspect the wrapped error to see whether the read (command) or write (file) side failed
Defensive patterns

Strategy: try-catch

Validate before calling

if fi, err := os.Stat(tempDir); err != nil || !fi.IsDir() { /* pick writable temp dir */ }

Try / catch

collector, err := diagnostic.PipeCommandOutputToFile(ctx, fs, cmd, output)
if err != nil {
	var perr *fs.PathError
	if errors.As(err, &perr) { /* disk/permission issue on output file */ }
	return fmt.Errorf("log collection failed: %w", err)
}

Prevention

When it happens

Trigger: io.Copy(outputHandle, stderrReader) fails mid-stream: disk full while writing the temp log, output file closed/invalid, or read error on the command's stderr pipe (command crashed, pipe broken).

Common situations: cloudflared diagnostic log collection on a host with full disk or read-only /tmp; journalctl/other command killed mid-read.

Understand the failure class

Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.

Related errors


AI-assisted analysis of cloudflare/cloudflared@2253eeeb25 (2026-09-06). Data as JSON: /api/errors/c4986f30ebe5f6f2. Report an issue: GitHub.