If scripts, cron jobs, or a dashboard already write to Nagios's command file, jaque reads the exact same wire format -- nothing to rewrite on the sending side. The cost is strictness: a line that does not parse, or names a verb jaque does not recognize, is always an error. jaque never guesses at malformed input the way a more permissive reader might.

1. Enabling it

-command-file /var/lib/jaque/rw/jaque.cmd

jaque creates the named pipe if it does not already exist. Empty, the default, disables passive ingestion via this route entirely.

2. The line format

[<unix_ts>] COMMAND_NAME;field1;field2;...

<unix_ts> is a Unix timestamp in brackets; the command name and fields follow, semicolon-separated.

3. The verbs, exactly

3.1 Passive results

PROCESS_SERVICE_CHECK_RESULT;<host>;<service>;<code>;<output>
PROCESS_HOST_CHECK_RESULT;<host>;<code>;<output>

<output> splits on the first | into text and perfdata; <code> is the familiar 0-3 exit-code convention.

3.2 Acknowledgements

ACKNOWLEDGE_SVC_PROBLEM;<host>;<service>;<sticky>;<notify>;<persistent>;<author>;<comment>
ACKNOWLEDGE_HOST_PROBLEM;<host>;<sticky>;<notify>;<persistent>;<author>;<comment>
REMOVE_SVC_ACKNOWLEDGEMENT;<host>;<service>
REMOVE_HOST_ACKNOWLEDGEMENT;<host>

<sticky> is 0/1 -- any nonzero value (Nagios UIs sometimes write 2) is treated as sticky. <notify> and <persistent> are parsed for arity and discarded: nothing dispatches notifications from these calls, and persistent comment retention has no equivalent here.

3.3 Downtimes -- fixed only

SCHEDULE_SVC_DOWNTIME;<host>;<service>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_HOST_DOWNTIME;<host>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
DEL_HOST_DOWNTIME;<downtime_id>
DEL_SVC_DOWNTIME;<downtime_id>

<fixed> must be 1 and <trigger_id> must be 0 -- flexible downtimes (which start on the next problem inside the window, not immediately) and triggered downtimes are rejected as parse errors, never silently coerced to fixed. <duration> is parsed and discarded; it only matters for flexible downtime, which jaque does not support. DEL_HOST_DOWNTIME and DEL_SVC_DOWNTIME carry only a downtime ID on the wire -- both names parse to the same command, and the two names exist purely for wire compatibility.

3.4 Group-scoped downtimes

These translate a legacy group name into a label selector via the same normalization the importer used when it emitted the label:

SCHEDULE_HOSTGROUP_HOST_DOWNTIME;<hostgroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_HOSTGROUP_SVC_DOWNTIME;<hostgroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_SERVICEGROUP_HOST_DOWNTIME;<servicegroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_SERVICEGROUP_SVC_DOWNTIME;<servicegroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>

Nagios has no group-scoped acknowledgement command, so there is no equivalent translation for ACKNOWLEDGE_*.

3.5 Selector-scoped verbs -- new, not legacy spellings

SCHEDULE_DOWNTIME;<selector>;<scope>;<start>;<end>;<author>;<comment>
ACKNOWLEDGE_PROBLEM;<selector>;<scope>;<sticky>;<author>;<comment>
REMOVE_ACKNOWLEDGEMENT;<selector>;<scope>

<selector> is any label selector text; <scope> is host or service, and anything else is a parse error. These carry only the fields the engine actually uses -- no <notify>/<persistent>/<fixed>/<trigger_id>/<duration> baggage.

4. Where these commands go

Everything the FIFO parses lands on the same command channel the ConnectRPC API feeds -- see FIFO and API for how the two doors converge, and what happens to a command aimed at an object owned by another engine.

5. Security considerations

The named pipe is filesystem-local IPC: anything able to write to -command-file can inject commands, so its permissions are the operator's to set, the same as they were under Nagios. Parsing does not soften that -- strict rejection of malformed input closes off one failure mode, not the trust boundary of the pipe itself.