[role="xpack"]
[testenv="basic"]
[[start-stop-ilm]]
== Start and stop {ilm}

All indices that are managed by {ilm-init} will continue to execute
their policies. There may be times when this is not desired on certain
indices, or maybe even all the indices in a cluster. For example,
maybe there are scheduled maintenance windows when cluster topology
changes are desired that may impact running {ilm-init} actions. For this reason,
{ilm-init} has two ways to disable operations.

When stopping {ilm-init}, snapshot lifecycle management operations are also stopped,
this means that no scheduled snapshots are created (currently ongoing snapshots
are unaffected).

Normally, {ilm-init} will be running by default.
To see the current operating status of {ilm-init}, use the <<ilm-get-status,Get Status API>>
to see the current state of {ilm-init}.

////
[source,console]
--------------------------------------------------
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "min_age": "10d",
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

PUT my_index
{
  "settings": {
    "index.lifecycle.name": "my_policy"
  }
}
--------------------------------------------------
////

[source,console]
--------------------------------------------------
GET _ilm/status
--------------------------------------------------

If the request does not encounter errors, you receive the following result:

[source,console-result]
--------------------------------------------------
{
  "operation_mode": "RUNNING"
}
--------------------------------------------------

The operating modes of {ilm-init}:

[[ilm-operating-modes]]
.{ilm-init} Operating Modes
[options="header"]
|===
|Name |Description
|RUNNING |Normal operation where all policies are executed as normal
|STOPPING|{ilm-init} has received a request to stop but is still processing some policies
|STOPPED |This represents a state where no policies are executed
|===

[discrete]
=== Stopping {ilm-init}

The {ilm-init} service can be paused such that no further steps will be executed
using the <<ilm-stop,Stop API>>.

[source,console]
--------------------------------------------------
POST _ilm/stop
--------------------------------------------------
// TEST[continued]

When stopped, all further policy actions will be halted. This will
be reflected in the Status API

////
[source,console]
--------------------------------------------------
GET _ilm/status
--------------------------------------------------
// TEST[continued]
////

[source,console-result]
--------------------------------------------------
{
  "operation_mode": "STOPPING"
}
--------------------------------------------------
// TESTRESPONSE[s/"STOPPING"/$body.operation_mode/]

The {ilm-init} service will then, asynchronously, run all policies to a point
where it is safe to stop. After {ilm-init} verifies that it is safe, it will
move to the `STOPPED` mode.

////
[source,console]
--------------------------------------------------
PUT trigger_ilm_cs_action

GET _ilm/status
--------------------------------------------------
// TEST[continued]
////

[source,console-result]
--------------------------------------------------
{
  "operation_mode": "STOPPED"
}
--------------------------------------------------
// TESTRESPONSE[s/"STOPPED"/$body.operation_mode/]

[discrete]
=== Starting {ilm-init}

To start {ilm-init} and continue executing policies, use the <<ilm-start, Start API>>.


[source,console]
--------------------------------------------------
POST _ilm/start
--------------------------------------------------
// TEST[continued]

////
[source,console]
--------------------------------------------------
GET _ilm/status
--------------------------------------------------
// TEST[continued]
////

The Start API will send a request to the {ilm-init} service to immediately begin
normal operations.

[source,console-result]
--------------------------------------------------
{
  "operation_mode": "RUNNING"
}
--------------------------------------------------
