timeoutSeconds limit. The maximum is 600 seconds (10 minutes). For a longer job, start the command detached, then poll for its result. Examples are builds, installs and data processing.
This replaces the nohup ... & pattern for simple cases. You do not keep an SSH session open. You do not write a unit file.
The flow is: start, then poll, then collect.
Start a command and read its status
- The command continues on the sandbox after the start call returns.
- Boat appends stdout and stderr to
~/.ascii/processes/<pid>.logon the sandbox. - The status call gives
running, theexitCodewhen the command ends, and the last part of each log.
Read only new output
- Give
stdoutOffsetandstderrOffsetto the status call. Start at 0. - The answer holds only the output written after those byte offsets.
- The answer also holds
stdoutNextOffsetandstderrNextOffset. Use them in the next call. - When
moreistrue, call again immediately.
Attach to a background process
Attach opens one stream. The stream sends the output while the command writes it, until the command ends. Use attach instead of polling. The API allows about 1,000 requests per minute per IP address. One poll per second for each of many processes reaches this limit. One open stream per process does not. Each line of the stream is one JSON object:
After a
reconnect line, open the stream again with those offsets. You get no gap and no repeat, for as long as the command runs. The CLI reconnects for you.
- A sandbox on an older agent answers
409 agent_outdateduntil its next agent upgrade. - To read output after the sandbox stops, use the command history.
Stop a background command
Stop the command by its process id. This also stops every process that the command started.- Boat sends
SIGTERMto the whole process group. - After 5 seconds, Boat sends
SIGKILLto the processes that remain. - The response holds the history record of the command, with status
killedand its last output.
When the agent restarts
The process runs under the systemd user manager of the sandbox user. Thus a restart of the agent of the sandbox does not interrupt it. A platform upgrade is an example of such a restart. But the agent forgets the process when it restarts:- The status changes to
lost. runningbecomes a best-effort check.- Boat no longer reports
exitCode. - Boat reads the logs from the files on disk.
Timeouts and retries
Synchronous commands accepttimeoutSeconds from 1 to 600. The default is 30. Boat refuses values outside that range with a 400 invalid_timeout error.
Boat never retries a command call automatically. A command is not idempotent. After a timeout (retryable: false) or a network failure during the call, the command can already run on the sandbox. You decide what to do next.