> This page is for version 10.
> For other versions, use one of these documentation indexes:
> - 11 (default): https://docs.nvidia.com/base-command-manager/product-manuals/11/llms.txt
> - 10: https://docs.nvidia.com/base-command-manager/product-manuals/10/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/base-command-manager/product-manuals/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/base-command-manager/product-manuals/_mcp/server.

# Monitoring Actions

This chapter covers how to manage monitoring-driven actions with `cmsh`.

## 3.1  Actions And Triggers

A monitoring action is a script that is executed by CMDaemon. It runs when triggered by the monitored data.

An action by itself does nothing—it needs a trigger ([section 12.4.5 of the *Administrator Manual*](/admin/monitoring#1245-monitoring-configuration-triggers)) to be defined to execute the action.

By default, several actions ([section 12.4.4 of the *Administrator Manual*](/admin/monitoring#1244-monitoring-configuration-actions)) are predefined:

* `Drain`: Drain node (node refuses new WLM jobs)

* `Event`: Send an event to users with connected client

* `ImageUpdate`: Update the image on the node

* `PowerOff`: Power off a device

* `PowerOn`: Power on a device:

* `PowerReset`: Power reset a device

* `Reboot`: Reboot a node

* `Send e-mail to administrators`: Send e-mail

* `Shutdown`: Shutdown a node

* `Undrain`: Undrain node (node accepts new WLM jobs)

* `killprocess`: `/cm/local/apps/cmd/scripts/actions/killprocess.pl`

* `remount`: `/cm/local/apps/cmd/scripts/actions/remount`

* `testaction`: `/cm/local/apps/cmd/scripts/actions/testaction`

A new action script can be created as follows:

**Example**

```bash
[basecm10]% monitoring action
[basecm10->monitoring->action]% add script MyScript
[...MyScript*]% set script /path/to/MyScript
[...MyScript*]% commit
```

## 3.2  Time Restrictions

It is possible to allow actions to only be executed at certain times, with the `allowedtime` setting.

**Example**

```bash
[basecm10]% monitoring action
[basecm10->monitoring->action]% add script MyScript
[...MyScript*]% set script /path/to/MyScript
[...MyScript*]% set allowedtime "9:00-17:00"
[...MyScript*]% commit
```

More complex timing restrictions are possible:

**Example**

```bash
monday-friday{9:00-17:00}
monday-friday{00:00-09:00;17:00-00:00};saturday-sunday
november-march{monday-saturday{13:00-17:00}}
may-september{monday-friday{09:00-18:00};saturday-sunday{13:00-17:00}}
```

Further examples can be seen in [section 12.4.4 of the *Administrator Manual*](/admin/monitoring#1244-monitoring-configuration-actions), [here](/admin/monitoring#1244-monitoring-configuration-actions).

### 3.2.1  Time Restriction Syntax In EBNF Notation

The allowed values can be written as a not-very-rigorous EBNF grammar:

**Example**

```bash
<start> ::= <time_intervals> | ""
<time_intervals> ::= <time_interval> (";" <time_interval>)*
<time_interval> = <inner_time_interval> "{" <time_intervals> "}"
<inner_time_interval> ::=
  | <day_of_week_interval>
  | <time_of_day_interval>
  | <day_of_month_interval>
  | <month_interval>
<day_of_week_interval> ::=
  | (<day_of_week> "-" <day_of_week>)
  | (<day_of_week> ("," day_of_week)*)
<day_of_week> ::=
  | "sunday" | "monday" | "tuesday" | "wednesday" | "thursday"
  | "friday" | "saturday"
<time_of_day_interval> ::= <time_of_day> "-" <time_of_day>
<time_of_day> ::= { <digit> } <digit> ":" <digit> <digit>
<digit> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "0"
<month_interval> ::= (<month> "-" <month>) | (<month> ("," <month>)*)
<month> ::=
  | "january" | "february" | "march" | "april" | "may" | "june" | "july"
  | "august" | "september"
  | "october" | "november" | "december"
<day_of_month_interval> ::= (<day_of_month> "-" <day_of_month>)
  | (<day_of_month> ("," <day_of_month>)*)
<day_of_month> ::= { <digit> } <digit>
```

The shortcomings in the rigor can be fixed, but then the description would be much longer.

For example, the `<time_interval>` definition should have the time that is specified in the curly brackets be lesser than the one specified by the time outside the curly brackets. So the form

`month_interval{day_of_month_interval}`         (*okay*)

would be correct, but not:

`day_of_month_interval{month_interval}`         (*not okay*)

Keeping the description non-rigorous provides a useful enough guide for developers.

## 3.3  CMDaemon Environment Variables

### 3.3.1  Standard Environment Variables Available In Action Scripts

<table>
  <colgroup>
    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        **Name**
      </th>

      <th>
        **Description**
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `CMD_ENTITY_UUID`
      </td>

      <td>
        The UUID of the entity that triggered the action.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ENTITY_NAME`
      </td>

      <td>
        The name of the entity that triggered the action.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ENTITY_TYPE`
      </td>

      <td>
        The type of entity that triggered the action.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_NAME`
      </td>

      <td>
        The name of the measurable that triggered the action.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_PARAMETER`
      </td>

      <td>
        The parameter of the measurable that triggered the action.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_TYPE`
      </td>

      <td>
        The type of the measurable.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE`
      </td>

      <td>
        The value that triggered the action.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_RAW_VALUE`
      </td>

      <td>
        The raw value.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE_TIME`
      </td>

      <td>
        The time on which the value was measured, in ms elapsed since Unix epoch.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INFO_MESSAGE`
      </td>

      <td>
        Extra information sampled along with the value.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_PRODUCER_NAME`
      </td>

      <td>
        The name of the monitoring data producer that samples the measurable.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ACTION_NAME`
      </td>

      <td>
        The name of the action that was triggered.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_TRIGGER_NAME`
      </td>

      <td>
        The name of the trigger.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_TRIGGER_EXPRESSION`
      </td>

      <td>
        The expression that was evaluated.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE_EVAL`
      </td>

      <td>
        The result of the evaluated expression.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE_COUNT`
      </td>

      <td>
        The number of times the expression evaluated to the same value.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_SEVERITY`
      </td>

      <td>
        The assigned severity of the trigger.
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATE_FLAPPING`
      </td>

      <td>
        Is the measurable flapping?
      </td>
    </tr>

    <tr>
      <td>
        `CMD_JSON_DATA`
      </td>

      <td>
        If set to 

        `yes`

        , then a JSON blob is passed on STDIN. The blob contains the information normally in 

        `env`

        . 

        `CMD_JSON_DATA`

         is used by the 

        `Send e-mail`

         action
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_UUID`
      </td>

      <td>
        The UUID of the measurable used
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MULTI_ACTION`
      </td>

      <td>
        Data values from measurables or triggers are dealt with together in some way if the action is 

        `yes`
      </td>
    </tr>

    <tr>
      <td colspan="2">**Example** If the value of the parameter `mergedmeasurables` is set to `yes`, and if more than one data value is gathered within a period that is specified by the value of `mergedelay`, then the data values for a measurable are dealt with together in some way by the action. `Merge delay`, `Merge triggers`, and `Merge measurables` are parameters that are available within some monitoring actions. \
       `[basecm10->monitoring->action]% list -f name:0,mergedelay,mergemeasurables` \
       `name (key) mergedelay mergemeasurables` \
       `-------------------- -------------- --------------` \
       `...` \
       `Send e-mail to administrators 2s yes` \
       `...` \
       `% [basecm10->monitoring->action]% use send e-mail to administrators` \
       <code>% [->action[Send e-mail to administrators]]% get mergedelay</code> \
       `% 2s` \
       <code>% [->action[Send e-mail to administrators]]% get mergemeasurables</code> \
       `% yes` \
       The `Send e-mail` action in this supports `CMD_MULTI_ACTION=yes` by sending one email with multiple values, instead of one e-mail per measured or triggered value:</td>
    </tr>

    <tr>
      <td>
        `CMD_TRIGGER_UUID`
      </td>

      <td>
        UUID of the trigger
      </td>
    </tr>

    <tr>
      <td>
        `CMD_SCRIPTTIMEOUT`
      </td>

      <td>
        script timeout, in seconds, when CMDaemon runs an action script
      </td>
    </tr>
  </tbody>
</table>

All action scripts have the preceding standard environment variables set.

In `cmsh`, if the action object has its `node environment` parameter set to the value `yes`, then scripts running on a node are enabled with an extended environment that provides many more `CMD_*` environment variables. Otherwise they run in the standard environment. There are more environment variables besides the standard and node environment ones.

A list of the standard or extended environment variables can be dumped by running the system command `env > /tmp/dumpfile` within an action script, such as the test example script, and triggering the script to run.

Many of the environment variables are similar to the ones used by initialize and finalize scripts ([section E.3 of the *Administrator Manual*](/admin/finalize#e3-environment-variables-available-to-initialize-and-finalize-scripts)) in the node-installer environment.

### 3.3.2  Extended Environment Variables Available To Action Scripts

If the action object has its `node environment` parameter set to the value `yes`, then scripts run in an extended environment that provides many more `CMD_*` environment variables. Otherwise they run in the standard environment of section [3.3.1](#331-standard-environment-variables-available-in-action-scripts).

The following table shows the extended as well as the standard environment variables, with some example values:

<table>
  <thead>
    <tr>
      <th colspan="2">*Table [3.3.2](#332-extended-environment-variables-available-to-action-scripts): Environment Variables For Nodes In The Extended Environment*</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        **Variable**
      </td>

      <td>
        **Example Value**
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ACTION_NAME`
      </td>

      <td>
        `myaction`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ACTIVE_HEAD_NODE_IP`
      </td>

      <td>
        `10.141.255.254`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_CLUSTERNAME`
      </td>

      <td>
        `basecm10`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_DEVICE_TYPE`
      </td>

      <td>
        `HeadNode`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ENTITY_NAME`
      </td>

      <td>
        basecm10
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ENTITY_TYPE`
      </td>

      <td>
        `HeadNode`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ENTITY_UUID`
      </td>

      <td>
        `78d29ab5-b415-486f-ad6a-04c5a983110f`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ENVIRONMENT_CACHE_EPOCH_MILLISECONDS`
      </td>

      <td>
        `1733150703765`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ENVIRONMENT_CACHE_UPDATES`
      </td>

      <td>
        `15`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_EXPORTS`
      </td>

      <td>
        `/cm/node-installer@internalnet /cm/node-installer/certificates@internalnet /var/spool/burn@internalnet /home@internalnet /cm/shared@internalnet`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_FSEXPORT__SLASH_cm_SLASH_node_DASH_`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `     installer`

        \<

        *node-installer values*

        \>
      </td>

      <td />
    </tr>

    <tr>
      <td>
        where 

        `<`

        *node-installer values*

        `>`

         takes these substitutions:
      </td>

      <td />
    </tr>
  </tbody>
</table>

| **\<*node-installer values*>**                  | **example value**                 |
| :---------------------------------------------- | :-------------------------------- |
| `_installer_AT_internalnet_ALLOWWRITE`          | `false`                           |
| `_AT_internalnet_HOSTS`                         | `10.141.0.0/16`                   |
| `_AT_internalnet_PATH`                          | `/cm/node-installer`              |
| `_SLASH_certificates_AT_internalnet_ALLOWWRITE` | `true`                            |
| `_SLASH_certificates_AT_internalnet_HOSTS`      | `10.141.0.0/16`                   |
| `_SLASH_certificates_AT_internalnet_PATH`       | `/cm/node-installer/certificates` |

<table>
  <tbody>
    <tr>
      <td>
        `CMD_FSEXPORT__SLASH_`

        \<

        *path values*

        \>
      </td>
    </tr>

    <tr>
      <td>
        where 

        `<`

        *path values*

        `>`

         takes these substitutions:
      </td>
    </tr>
  </tbody>
</table>

| **\<*path values*>**                                   | **example value** |
| :----------------------------------------------------- | :---------------- |
| `cm_SLASH_shared_AT_internalnet_ALLOWWRITE`            | `true`            |
| `cm_SLASH_shared_AT_internalnet_HOSTS`                 | `10.141.0.0/16`   |
| `cm_SLASH_shared_AT_internalnet_PATH`                  | `/cm/shared`      |
| `home_AT_internalnet_ALLOWWRITE`                       | `true`            |
| `home_AT_internalnet_HOSTS`                            | `10.141.0.0/16`   |
| `home_AT_internalnet_PATH`                             | `/home`           |
| `var_SLASH_spool_SLASH_burn_AT_internalnet_ALLOWWRITE` | `true`            |
| `var_SLASH_spool_SLASH_burn_AT_internalnet_HOSTS`      | `10.141.0.0/16`   |
| `var_SLASH_spool_SLASH_burn_AT_internalnet_PATH`       | `/var/spool/burn` |

<table>
  <tbody>
    <tr>
      <td>
        `CMD_HOSTNAME`
      </td>

      <td>
        `basecm10`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_HTTP_PORT`
      </td>

      <td>
        `8080`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INFO_MESSAGE`
      </td>

      <td />
    </tr>

    <tr>
      <td colspan="2">The interfaces `eth0` and `eth1` that make up the environment variable names listed next are for a Type 1 network with ethernet interfaces. The environment variable names change if the interface names change. For example, with InfiniBand interfaces, the `eth0`, `eth1` strings become `ib0`, `ib1`.</td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth0_IP`
      </td>

      <td>
        `10.141.255.254`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth0_MAC`
      </td>

      <td>
        `00:00:00:00:00:00`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth0_MASK_BITS`
      </td>

      <td>
        `16`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth0_MTU`
      </td>

      <td>
        `1500`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth0_SPEED`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth0_STARTIF`
      </td>

      <td>
        `ALWAYS`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth0_TYPE`
      </td>

      <td>
        `NetworkPhysicalInterface`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_GATEWAY`
      </td>

      <td>
        `192.168.255.254`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_IP`
      </td>

      <td>
        `192.168.244.169`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_MAC`
      </td>

      <td>
        `00:00:00:00:00:00`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_MASK_BITS`
      </td>

      <td>
        `20`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_MTU`
      </td>

      <td>
        `1500`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_SPEED`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_STARTIF`
      </td>

      <td>
        `ALWAYS`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACE_eth1_TYPE`
      </td>

      <td>
        `NetworkPhysicalInterface`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INTERFACES`
      </td>

      <td>
        `eth0 eth1`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_IP`
      </td>

      <td>
        `10.141.255.254`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_JSON_DATA`
      </td>

      <td>
        `no`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MAC`
      </td>

      <td>
        `FA:16:3E:33:8E:10`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MANAGEMENT_IP`
      </td>

      <td>
        `10.141.255.254`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_NAME`
      </td>

      <td>
        `PageOut`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_PARAMETER`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_TYPE`
      </td>

      <td>
        `MonitoringMeasurableMetric`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MEASURABLE_UUID`
      </td>

      <td>
        `24321ec1-275c-4fd2-92eb-2ad7494216a8`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MULTI_ACTION`
      </td>

      <td>
        `no`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_MYSQL_SOCKET`
      </td>

      <td>
        `/var/run/mysqld/mysqld.sock`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_NODEGROUPS`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_NODE_INSTALLER_PATH`
      </td>

      <td>
        `/cm/node-installer`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_PARTITION`
      </td>

      <td>
        `base`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_PASSIVE_HEAD_NODE_IP`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_PORT`
      </td>

      <td>
        `8081`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_PRIMARY_HEAD_NODE`
      </td>

      <td>
        `basecm10`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_PRODUCER_NAME`
      </td>

      <td>
        `ProcVMStat`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_PROTOCOL`
      </td>

      <td>
        `https`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_RAW_VALUE`
      </td>

      <td>
        `103603.200000`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_ROLES`
      </td>

      <td>
        `SlurmServer Storage Backup Boot Provisioning Monitoring SlurmAccounting Firewall HeadNode SlurmSubmit `
      </td>
    </tr>

    <tr>
      <td>
        `CMD_SCRIPTTIMEOUT`
      </td>

      <td>
        `5`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_SEVERITY`
      </td>

      <td>
        `10`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_SHARED_HEAD_NODE_IP`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_STATE_FLAPPING`
      </td>

      <td>
        `no`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_BURNING`
      </td>

      <td>
        `NO`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_CLOSED`
      </td>

      <td>
        `NO`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_HEALTHCHECK_FAILED`
      </td>

      <td>
        `YES`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_HEALTHCHECK_UNKNOWN`
      </td>

      <td>
        `NO`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_MESSAGE`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_STATUS_MUTED`
      </td>

      <td>
        `NO`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_RESTART_REQUIRED`
      </td>

      <td>
        `NO`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_STATEFLAPPING`
      </td>

      <td>
        `NO`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_TERMINATED`
      </td>

      <td>
        `NO`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_TOOLMESSAGE`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_STATUS`
      </td>

      <td>
        `UP`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_UPDATE_INDEX`
      </td>

      <td>
        `4`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_STATUS_USERMESSAGE`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_SYSINFO_SYSTEM_MANUFACTURER`
      </td>

      <td>
        `OpenStack Foundation`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_SYSINFO_SYSTEM_NAME`
      </td>

      <td>
        `OpenStack Nova`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_TRIGGER_EXPRESSION`
      </td>

      <td>
        <code>(basecm10, *,*) > 50</code>
      </td>
    </tr>

    <tr>
      <td>
        `CMD_TRIGGER_NAME`
      </td>

      <td>
        `killallyestrigger`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_TRIGGER_UUID`
      </td>

      <td>
        `1b784150-3f4f-4cb2-af37-993bbbe3dea4`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_UPDATE_EPOCH_MILLISECONDS`
      </td>

      <td>
        `1733150703765`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_USERDEFINED1`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_USERDEFINED2`
      </td>

      <td />
    </tr>

    <tr>
      <td>
        `CMD_UUID`
      </td>

      <td>
        `78d29ab5-b415-486f-ad6a-04c5a983110f`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE`
      </td>

      <td>
        `101 KiB/s`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE_COUNT`
      </td>

      <td>
        `1`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE_EVAL`
      </td>

      <td>
        `true`
      </td>
    </tr>

    <tr>
      <td>
        `CMD_VALUE_TIME`
      </td>

      <td>
        `1733151851527`
      </td>
    </tr>
  </tbody>
</table>

### 3.3.3  Environment Variables Useful For Debugging

The following environmental variables can be handy for debugging:

<table>
  <colgroup>
    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th colspan="2">*Table [3.3.3](#333-environment-variables-useful-for-debugging): Environment Variables Useful For Debugging*</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        **Variable**
      </td>

      <td>
        **Description**
      </td>
    </tr>

    <tr>
      <td>
        `CMD_INFO_FD`
      </td>

      <td>
        Set file descriptor used by CMDaemon for collecting information (default value: 

        `3`

        )
      </td>
    </tr>

    <tr>
      <td>
        `CMD_DEBUG`
      </td>

      <td>
        Setting this to a value of 

        `1`

         often gives more debug output (default value: 

        `0`

        )
      </td>
    </tr>
  </tbody>
</table>

Examples of their use are given in sections [2.3](/developer/monitoring-data-producers#23-metric-monitoring-data-producers), [2.4](/developer/monitoring-data-producers#24-health-check-monitoring-data-producers), and [2.13](/developer/monitoring-data-producers#213-debugging-standalone-scripts).