arthas/tutorials/katacoda/case-http-api-en/one-time-command.md
2020-08-14 14:02:57 +08:00

2.6 KiB

Similar to executing batch commands, the one-time commands are executed synchronously. No need to create a session, no need to set the sessionId option.

{
  "action": "exec",
  "command": "<Arthas command line>"
}

For example, get the Arthas version number:

curl -Ss -XPOST http://localhost:8563/api -d ' { "action":"exec", "command":"version" } ' | json_pp{{execute T3}}

The response is as follows:

{
   "state" : "SUCCEEDED",
   "sessionId" : "ee3bc004-4586-43de-bac0-b69d6db7a869",
   "body" : {
      "results" : [
         {
            "type" : "version",
            "version" : "3.3.7",
            "jobId" : 5
         },
         {
            "jobId" : 5,
            "statusCode" : 0,
            "type" : "status"
         }
      ],
      "timeExpired" : false,
      "command" : "version",
      "jobStatus" : "TERMINATED",
      "jobId" : 5
   }
}

Response data format description:

  • state: Request processing status, refer to the description of "Response Status".
  • sessionId : Arthas session ID, one-time command to automatically create and destroy temporary sessions.
  • body.jobId: The job ID of the command, all output results of the same job are the same jobId.
  • body.jobStatus: The job status of the command.
  • body.timeExpired: Whether the job execution timed out.
  • body/results: Command execution results.

Command result format description

 [{
    "type" : "version",
    "version" : "3.3.7",
    "jobId" : 5
 },
 {
    "jobId" : 5,
    "statusCode" : 0,
    "type" : "status"
 }]
  • type : The command result type, except for the special ones such as status, the others remain the same as the Arthas command name. Please refer to the section "Special command results".
  • jobId : The job ID of the command.
  • Other fields are the data of each different command.

Note: You can also use a one-time command to execute continuous output commands such as watch/trace, but you can't interrupt the command execution, and there may be hang up for a long time. Please refer to the example in the "Make watch command output a map object" section.

Please try to deal with it in the following way:

  • Set a reasonable execTimeout to forcibly interrupt the command execution after the timeout period is reached to avoid a long hang.
  • Use the -n parameter to specify a smaller number of executions.
  • Ensure the methods of the command matched can be successfully hit and the condition-express is written correctly. If the watch/trace does not hit, even if -n 1 is specified, it will hang and wait until the execution timeout.