diff --git a/core/composer.json b/core/composer.json
index 78ef4f7..bd6fd39 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -40,6 +40,7 @@
   "replace": {
     "drupal/action": "self.version",
     "drupal/aggregator": "self.version",
+    "drupal/automated_cron": "self.version",
     "drupal/bartik": "self.version",
     "drupal/ban": "self.version",
     "drupal/basic_auth": "self.version",
diff --git a/core/modules/automated_cron/automated_cron.info.yml b/core/modules/automated_cron/automated_cron.info.yml
new file mode 100644
index 0000000..f2f22b7
--- /dev/null
+++ b/core/modules/automated_cron/automated_cron.info.yml
@@ -0,0 +1,6 @@
+name: Automated cron
+type: module
+description: 'Provides an automated cron by executing it at the end of a request.'
+package: Core
+version: VERSION
+core: 8.x
diff --git a/core/modules/automated_cron/automated_cron.module b/core/modules/automated_cron/automated_cron.module
new file mode 100644
index 0000000..f49be04
--- /dev/null
+++ b/core/modules/automated_cron/automated_cron.module
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @file
+ * Provides an automated cron by executing it at the end of a request.
+ */
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Implements hook_help().
+ */
+function automated_cron_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    case 'help.page.automated_cron':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The automated cron system runs the Drupal cron operation using normal browser/page requests instead of having to set up a separate cron job. Automatic cron module checks at the end of each Drupal request when cron operation was last ran and, if it has been too long since last run, it executes the cron tasks as part of that request. For more information, see the <a href="!docs">cron tutorial on drupal.org</a>.', array('!docs' => 'https://www.drupal.org/cron'))  . '</p>';
+      $output .= '<h3>' . t('Uses') . '</h3>';
+      $output .= '<dl>';
+      $output .= '<dt>' . t('Configuring the automatic cron') . '</dt>';
+      $output .= '<dd>' . t('On the <a href="!cron-settings">Cron page</a>,  you can manage the automated cron settings. The default frequency is every three hours.', array('!cron-settings' => \Drupal::url('system.cron_settings')))  . '</dd>';
+      $output .= '<dt>' . t('Disabling the automatic cron') . '</dt>';
+      $output .= '<dd>' . t('If you want to disable the automated cron, change the "Run cron every" value to "Never".')  . '</dd>';
+      $output .= '</dl>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function automated_cron_form_system_cron_settings_alter(&$form, &$form_state) {
+  $cron_config = \Drupal::config('automated_cron.cron');
+
+  // Add automatic cron settings.
+  $form['cron'] = [
+    '#title' => t('Cron settings'),
+    '#type' => 'details',
+    '#open' => TRUE,
+  ];
+  $options = [3600, 10800, 21600, 43200, 86400, 604800];
+  $form['cron']['autorun'] = [
+    '#type' => 'select',
+    '#title' => t('Run cron every'),
+    '#description' => t('More information about setting up scheduled tasks can be found by <a href="@url">reading the cron tutorial on drupal.org</a>.', ['@url' => 'https://www.drupal.org/cron']),
+    '#default_value' => $cron_config->get('threshold.autorun'),
+    '#options' => [0 => t('Never')] + array_map([Drupal::service('date.formatter'), 'formatInterval'], array_combine($options, $options)),
+  ];
+
+  $form['actions']['#type'] = 'actions';
+  $form['actions']['submit'] = [
+    '#type' => 'submit',
+    '#value' => t('Save configuration'),
+    '#button_type' => 'primary',
+  ];
+
+  // Add submit callback.
+  $form['#submit'][] = 'automated_cron_settings_submit';
+
+  // Theme this form as a config form.
+  $form['#theme'] = 'system_config_form';
+}
+
+/**
+ * Form submission handler for system_cron_settings().
+ */
+function automated_cron_settings_submit(array $form, FormStateInterface $form_state) {
+  \Drupal::configFactory()->getEditable('automated_cron.cron')
+    ->set('threshold.autorun', $form_state->getValue('autorun'))
+    ->save();
+  drupal_set_message(t('The configuration options have been saved.'));
+}
diff --git a/core/modules/automated_cron/automated_cron.services.yml b/core/modules/automated_cron/automated_cron.services.yml
new file mode 100644
index 0000000..729842f
--- /dev/null
+++ b/core/modules/automated_cron/automated_cron.services.yml
@@ -0,0 +1,6 @@
+services:
+  automated_cron.subscriber:
+    class: Drupal\automated_cron\EventSubscriber\AutomaticCron
+    arguments: ['@cron', '@config.factory', '@state']
+    tags:
+      - { name: event_subscriber }
diff --git a/core/modules/automated_cron/config/install/automated_cron.cron.yml b/core/modules/automated_cron/config/install/automated_cron.cron.yml
new file mode 100644
index 0000000..08bf43e
--- /dev/null
+++ b/core/modules/automated_cron/config/install/automated_cron.cron.yml
@@ -0,0 +1,2 @@
+threshold:
+  autorun: 0
diff --git a/core/modules/automated_cron/config/schema/automated_cron.schema.yml b/core/modules/automated_cron/config/schema/automated_cron.schema.yml
new file mode 100644
index 0000000..305eb35
--- /dev/null
+++ b/core/modules/automated_cron/config/schema/automated_cron.schema.yml
@@ -0,0 +1,13 @@
+# Schema for the configuration files of the Automated cron module.
+
+automated_cron.cron:
+  type: config_object
+  label: 'Automated cron settings'
+  mapping:
+    threshold:
+      type: mapping
+      label: 'Thresholds'
+      mapping:
+        autorun:
+          type: integer
+          label: 'Run cron every'
diff --git a/core/modules/system/src/EventSubscriber/AutomaticCron.php b/core/modules/automated_cron/src/EventSubscriber/AutomaticCron.php
similarity index 64%
rename from core/modules/system/src/EventSubscriber/AutomaticCron.php
rename to core/modules/automated_cron/src/EventSubscriber/AutomaticCron.php
index 3b630df..05f6865 100644
--- a/core/modules/system/src/EventSubscriber/AutomaticCron.php
+++ b/core/modules/automated_cron/src/EventSubscriber/AutomaticCron.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains \Drupal\system\EventSubscriber\AutomaticCron.
+ * Contains \Drupal\automated_cron\EventSubscriber\AutomaticCron.
  */
 
-namespace Drupal\system\EventSubscriber;
+namespace Drupal\automated_cron\EventSubscriber;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\CronInterface;
@@ -36,7 +36,7 @@ class AutomaticCron implements EventSubscriberInterface {
   /**
    * The state key value store.
    *
-   * Drupal\Core\State\StateInterface;
+   * @var \Drupal\Core\State\StateInterface;
    */
   protected $state;
 
@@ -48,31 +48,26 @@ class AutomaticCron implements EventSubscriberInterface {
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The config factory.
    * @param \Drupal\Core\State\StateInterface $state
-   *   The state key value store.
+   *   The state key-value store service.
    */
   public function __construct(CronInterface $cron, ConfigFactoryInterface $config_factory, StateInterface $state) {
     $this->cron = $cron;
-    $this->config = $config_factory->get('system.cron');
+    $this->config = $config_factory->get('automated_cron.cron');
     $this->state = $state;
   }
 
   /**
    * Run the automated cron if enabled.
    *
-   * @param Symfony\Component\HttpKernel\Event\PostResponseEvent $event
+   * @param \Symfony\Component\HttpKernel\Event\PostResponseEvent $event
    *   The Event to process.
    */
   public function onTerminate(PostResponseEvent $event) {
-    // If the site is not fully installed, suppress the automated cron run.
-    // Otherwise it could be triggered prematurely by Ajax requests during
-    // installation.
-    if ($this->state->get('install_task') == 'done') {
-      $threshold = $this->config->get('threshold.autorun');
-      if ($threshold > 0) {
-        $cron_next = $this->state->get('system.cron_last', 0) + $threshold;
-        if (REQUEST_TIME > $cron_next) {
-          $this->cron->run();
-        }
+    $threshold = $this->config->get('threshold.autorun');
+    if ($threshold > 0) {
+      $cron_next = $this->state->get('system.cron_last', 0) + $threshold;
+      if ((int) $event->getRequest()->server->get('REQUEST_TIME') > $cron_next) {
+        $this->cron->run();
       }
     }
   }
@@ -84,9 +79,7 @@ public function onTerminate(PostResponseEvent $event) {
    *   An array of event listener definitions.
    */
   public static function getSubscribedEvents() {
-    $events[KernelEvents::TERMINATE][] = array('onTerminate', 100);
-
-    return $events;
+    return [KernelEvents::TERMINATE => [['onTerminate', 100]]];
   }
 
 }
diff --git a/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php b/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php
index 4c71e85..b5409be 100644
--- a/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php
+++ b/core/modules/config/src/Tests/ConfigInstallProfileOverrideTest.php
@@ -37,7 +37,6 @@ function testInstallProfileConfigOverwrite() {
     // The expected configuration from the system module.
     $expected_original_data = array(
       'threshold' => array(
-        'autorun' => 0,
         'requirements_warning' => 172800,
         'requirements_error' => 1209600,
       ),
@@ -45,7 +44,6 @@ function testInstallProfileConfigOverwrite() {
     // The expected active configuration altered by the install profile.
     $expected_profile_data = array(
       'threshold' => array(
-        'autorun' => 0,
         'requirements_warning' => 259200,
         'requirements_error' => 1209600,
       ),
diff --git a/core/modules/config/tests/config_override_test/config/install/system.cron.yml b/core/modules/config/tests/config_override_test/config/install/system.cron.yml
index 79f797f..e4a27dc 100644
--- a/core/modules/config/tests/config_override_test/config/install/system.cron.yml
+++ b/core/modules/config/tests/config_override_test/config/install/system.cron.yml
@@ -1,5 +1,4 @@
 threshold:
-  autorun: 0
   requirements_warning: 172800
   requirements_error: 1209600
 
diff --git a/core/modules/search/src/Tests/SearchMultilingualEntityTest.php b/core/modules/search/src/Tests/SearchMultilingualEntityTest.php
index f924de8..1e5a40f 100644
--- a/core/modules/search/src/Tests/SearchMultilingualEntityTest.php
+++ b/core/modules/search/src/Tests/SearchMultilingualEntityTest.php
@@ -42,7 +42,11 @@ protected function setUp() {
     $this->drupalLogin($user);
 
     // Make sure that auto-cron is disabled.
-    $this->config('system.cron')->set('threshold.autorun', 0)->save();
+    /** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */
+    $module_handler = $this->container->get('module_handler');
+    if ($module_handler->moduleExists('automated_cron')) {
+      $this->config('automated_cron.cron')->set('threshold.autorun', 0)->save();
+    }
 
     // Set up the search plugin.
     $this->plugin = $this->container->get('plugin.manager.search')->createInstance('node_search');
diff --git a/core/modules/system/config/install/system.cron.yml b/core/modules/system/config/install/system.cron.yml
index 5cf7ee6..e6f30d3 100644
--- a/core/modules/system/config/install/system.cron.yml
+++ b/core/modules/system/config/install/system.cron.yml
@@ -1,4 +1,3 @@
 threshold:
-  autorun: 0
   requirements_warning: 172800
   requirements_error: 1209600
diff --git a/core/modules/system/config/schema/system.schema.yml b/core/modules/system/config/schema/system.schema.yml
index b4a8873..e34d375 100644
--- a/core/modules/system/config/schema/system.schema.yml
+++ b/core/modules/system/config/schema/system.schema.yml
@@ -66,9 +66,6 @@ system.cron:
       type: mapping
       label: 'Thresholds'
       mapping:
-        autorun:
-          type: integer
-          label: 'Run cron every'
         requirements_warning:
           type: integer
           label: 'Requirements warning period'
diff --git a/core/modules/system/src/Form/CronForm.php b/core/modules/system/src/Form/CronForm.php
index e75c156..db33896 100644
--- a/core/modules/system/src/Form/CronForm.php
+++ b/core/modules/system/src/Form/CronForm.php
@@ -10,16 +10,17 @@
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\CronInterface;
 use Drupal\Core\Datetime\DateFormatter;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\State\StateInterface;
-use Drupal\Core\Form\ConfigFormBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 
 /**
  * Configure cron settings for this site.
  */
-class CronForm extends ConfigFormBase {
+class CronForm extends FormBase {
 
   /**
    * Stores the state storage service.
@@ -43,6 +44,13 @@ class CronForm extends ConfigFormBase {
   protected $dateFormatter;
 
   /**
+   * The module handler service.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler
+   */
+  protected $moduleHandler;
+
+  /**
    * Constructs a CronForm object.
    *
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
@@ -53,12 +61,14 @@ class CronForm extends ConfigFormBase {
    *   The cron service.
    * @param \Drupal\Core\Datetime\DateFormatter $date_formatter
    *   The date formatter service.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler service.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, StateInterface $state, CronInterface $cron, DateFormatter $date_formatter) {
-    parent::__construct($config_factory);
+  public function __construct(ConfigFactoryInterface $config_factory, StateInterface $state, CronInterface $cron, DateFormatter $date_formatter, ModuleHandlerInterface $module_handler) {
     $this->state = $state;
     $this->cron = $cron;
     $this->dateFormatter = $date_formatter;
+    $this->moduleHandler = $module_handler;
   }
 
   /**
@@ -69,7 +79,8 @@ public static function create(ContainerInterface $container) {
       $container->get('config.factory'),
       $container->get('state'),
       $container->get('cron'),
-      $container->get('date.formatter')
+      $container->get('date.formatter'),
+      $container->get('module_handler')
     );
   }
 
@@ -83,23 +94,13 @@ public function getFormId() {
   /**
    * {@inheritdoc}
    */
-  protected function getEditableConfigNames() {
-    return ['system.cron'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    $config = $this->config('system.cron');
-
     $form['description'] = array(
       '#markup' => '<p>' . t('Cron takes care of running periodic tasks like checking for updates and indexing content for search.') . '</p>',
     );
     $form['run'] = array(
       '#type' => 'submit',
       '#value' => t('Run cron'),
-      '#submit' => array('::submitCron'),
     );
     $status = '<p>' . $this->t('Last run: %time ago.', array('%time' => $this->dateFormatter->formatTimeDiffSince($this->state->get('system.cron_last')))) . '</p>';
     $form['status'] = array(
@@ -111,38 +112,19 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#markup' => '<p>' . t('To run cron from outside the site, go to <a href=":cron">@cron</a>', array(':cron' => $cron_url, '@cron' => $cron_url)) . '</p>',
     );
 
-    $form['cron'] = array(
-      '#title' => t('Cron settings'),
-      '#type' => 'details',
-      '#open' => TRUE,
-    );
-    $options = array(3600, 10800, 21600, 43200, 86400, 604800);
-    $form['cron']['cron_safe_threshold'] = array(
-      '#type' => 'select',
-      '#title' => t('Run cron every'),
-      '#description' => t('More information about setting up scheduled tasks can be found by <a href=":url">reading the cron tutorial on drupal.org</a>.', array(':url' => 'https://www.drupal.org/cron')),
-      '#default_value' => $config->get('threshold.autorun'),
-      '#options' => array(0 => t('Never')) + array_map(array($this->dateFormatter, 'formatInterval'), array_combine($options, $options)),
-    );
-
-    return parent::buildForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->config('system.cron')
-      ->set('threshold.autorun', $form_state->getValue('cron_safe_threshold'))
-      ->save();
+    if (!$this->moduleHandler->moduleExists('automated_cron')) {
+      $form['cron'] = array(
+        '#markup' => $this->t('Enable the <em>Automated cron</em> module to allow cron execution at the end of a request.'),
+      );
+    }
 
-    parent::submitForm($form, $form_state);
+    return $form;
   }
 
   /**
    * Runs cron and reloads the page.
    */
-  public function submitCron(array &$form, FormStateInterface $form_state) {
+  public function submitForm(array &$form, FormStateInterface $form_state) {
     // Run cron manually from Cron form.
     if ($this->cron->run()) {
       drupal_set_message(t('Cron run successfully.'));
diff --git a/core/modules/system/src/Tests/System/CronRunTest.php b/core/modules/system/src/Tests/System/CronRunTest.php
index 063d9ab..3658f8f 100644
--- a/core/modules/system/src/Tests/System/CronRunTest.php
+++ b/core/modules/system/src/Tests/System/CronRunTest.php
@@ -21,7 +21,7 @@ class CronRunTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('common_test', 'common_test_cron_helper');
+  public static $modules = ['common_test', 'common_test_cron_helper', 'automated_cron'];
 
   /**
    * Test cron runs.
@@ -60,7 +60,7 @@ function testAutomaticCron() {
     $cron_last = time();
     $cron_safe_threshold = 100;
     \Drupal::state()->set('system.cron_last', $cron_last);
-    $this->config('system.cron')
+    $this->config('automated_cron.cron')
       ->set('threshold.autorun', $cron_safe_threshold)
       ->save();
     $this->drupalGet('');
@@ -74,7 +74,7 @@ function testAutomaticCron() {
     $this->assertTrue($cron_last < \Drupal::state()->get('system.cron_last'), 'Cron runs when the cron threshold is passed.');
 
     // Disable the cron threshold through the interface.
-    $this->drupalPostForm('admin/config/system/cron', array('cron_safe_threshold' => 0), t('Save configuration'));
+    $this->drupalPostForm('admin/config/system/cron', array('autorun' => 0), t('Save configuration'));
     $this->assertText(t('The configuration options have been saved.'));
     $this->drupalLogout();
 
diff --git a/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithAutomaticCronTest.php b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithAutomaticCronTest.php
new file mode 100644
index 0000000..d8e56ef
--- /dev/null
+++ b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithAutomaticCronTest.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Update\AutomatedCronUpdateWithAutomaticCronTest.
+ */
+
+namespace Drupal\system\Tests\Update;
+
+/**
+ * Ensures that the automatic cron module is installed on update.
+ *
+ * @group Update
+ */
+class AutomatedCronUpdateWithAutomaticCronTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * Ensures that automatic cron module isn installed and the config migrated.
+   */
+  public function testUpdate() {
+    $this->runUpdates();
+
+    $module_data = \Drupal::config('core.extension')->get('module');
+    $this->assertTrue(isset($module_data['automated_cron']), 'The automatic cron module was installed.');
+  }
+
+}
diff --git a/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithoutAutomaticCronTest.php b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithoutAutomaticCronTest.php
new file mode 100644
index 0000000..0e8bcf5
--- /dev/null
+++ b/core/modules/system/src/Tests/Update/AutomatedCronUpdateWithoutAutomaticCronTest.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Update\AutomatedCronUpdateWithoutAutomaticCronTest.
+ */
+
+namespace Drupal\system\Tests\Update;
+
+/**
+ * Ensures that the automatic cron module is not installed on update.
+ *
+ * @group Update
+ */
+class AutomatedCronUpdateWithoutAutomaticCronTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+      __DIR__ . '/../../../tests/fixtures/update/drupal-8.without_automated_cron.php',
+    ];
+  }
+
+  /**
+   * Ensures that automatic cron module isn't installed and the config migrated.
+   */
+  public function testUpdate() {
+    $this->runUpdates();
+    $module_data = \Drupal::config('core.extension')->get('module');
+    $this->assertFalse(isset($module_data['automated_cron']), 'The automatic cron module was not installed.');
+  }
+
+}
diff --git a/core/modules/system/src/Tests/Update/UpdatePathTestBase.php b/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
index 5fae5a0..e5780a1 100644
--- a/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
+++ b/core/modules/system/src/Tests/Update/UpdatePathTestBase.php
@@ -263,6 +263,7 @@ protected function runUpdates() {
     $names = $this->container->get('config.storage')->listAll();
     /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */
     $typed_config = $this->container->get('config.typed');
+    $typed_config->clearCachedDefinitions();
     foreach ($names as $name) {
       $config = $this->config($name);
       $this->assertConfigSchema($typed_config, $name, $config->get());
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index f391829..621da36 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1663,5 +1663,27 @@ function system_update_8008() {
 }
 
 /**
+ * Enable automatic cron module and move the config into it.
+ */
+function system_update_8009() {
+  $config_factory = \Drupal::configFactory();
+  $system_cron_config = $config_factory->getEditable('system.cron');
+  if ($autorun = $system_cron_config->get('threshold.autorun')) {
+    // Install 'automated_cron' module.
+    \Drupal::service('module_installer')->install(['automated_cron'], FALSE);
+
+    // Copy 'autorun' value into the new module config.
+    $config_factory->getEditable('automated_cron.cron')
+      ->set('threshold.autorun', $autorun)
+      ->save(TRUE);
+  }
+
+  // Remove the 'autorun' key in system module config.
+  $system_cron_config
+    ->clear('threshold.autorun')
+    ->save(TRUE);
+}
+
+/**
  * @} End of "addtogroup updates-8.0.0-beta".
  */
diff --git a/core/modules/system/system.services.yml b/core/modules/system/system.services.yml
index 29ea018..0f816d6 100644
--- a/core/modules/system/system.services.yml
+++ b/core/modules/system/system.services.yml
@@ -37,11 +37,6 @@ services:
     class: Drupal\system\SystemConfigSubscriber
     tags:
       - { name: event_subscriber }
-  system.automatic_cron:
-    class: Drupal\system\EventSubscriber\AutomaticCron
-    arguments: ['@cron', '@config.factory', '@state']
-    tags:
-      - { name: event_subscriber }
   system.config_cache_tag:
     class: Drupal\system\EventSubscriber\ConfigCacheTag
     arguments: ['@theme_handler', '@cache_tags.invalidator']
diff --git a/core/modules/system/tests/fixtures/update/drupal-8.without_automated_cron.php b/core/modules/system/tests/fixtures/update/drupal-8.without_automated_cron.php
new file mode 100644
index 0000000..81e4e72
--- /dev/null
+++ b/core/modules/system/tests/fixtures/update/drupal-8.without_automated_cron.php
@@ -0,0 +1,14 @@
+<?php
+
+$connection = Drupal\Core\Database\Database::getConnection();
+$config = $connection;
+
+$connection->merge('config')
+  ->condition('name', 'system.cron')
+  ->condition('collection', '')
+  ->fields([
+    'name' => 'system.cron',
+    'collection' => '',
+    'data' => serialize(['threshold' => ['autorun' => 0]]),
+  ])
+  ->execute();
diff --git a/core/profiles/standard/config/install/automated_cron.cron.yml b/core/profiles/standard/config/install/automated_cron.cron.yml
new file mode 100644
index 0000000..c314522
--- /dev/null
+++ b/core/profiles/standard/config/install/automated_cron.cron.yml
@@ -0,0 +1,2 @@
+threshold:
+  autorun: 10800
diff --git a/core/profiles/standard/config/install/system.cron.yml b/core/profiles/standard/config/install/system.cron.yml
index 9289f28..e6f30d3 100644
--- a/core/profiles/standard/config/install/system.cron.yml
+++ b/core/profiles/standard/config/install/system.cron.yml
@@ -1,4 +1,3 @@
 threshold:
-  autorun: 10800
   requirements_warning: 172800
   requirements_error: 1209600
diff --git a/core/profiles/standard/standard.info.yml b/core/profiles/standard/standard.info.yml
index 68fcba2..b51fc8e 100644
--- a/core/profiles/standard/standard.info.yml
+++ b/core/profiles/standard/standard.info.yml
@@ -38,6 +38,7 @@ dependencies:
   - views
   - views_ui
   - tour
+  - automated_cron
 themes:
   - bartik
   - seven
diff --git a/core/profiles/testing_config_overrides/config/install/system.cron.yml b/core/profiles/testing_config_overrides/config/install/system.cron.yml
index 38b0d88..e9c97bc 100644
--- a/core/profiles/testing_config_overrides/config/install/system.cron.yml
+++ b/core/profiles/testing_config_overrides/config/install/system.cron.yml
@@ -1,4 +1,3 @@
 threshold:
-  autorun: 0
   requirements_warning: 259200
   requirements_error: 1209600
