diff --git a/ReadinessCheckers/CronFrequency.php b/ReadinessCheckers/CronFrequency.php
new file mode 100644
index 0000000000000000000000000000000000000000..16d276c14779b8f578274546e82a45ad2c83f03e
--- /dev/null
+++ b/ReadinessCheckers/CronFrequency.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * Cron frequency checker.
+ */
+class CronFrequency implements ReadinessCheckerInterface {
+
+  /**
+   * Minimum cron threshold is 3 hours.
+   */
+  const MINIMUM_CRON_INTERVAL = 10800;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function run() {
+    $messages = [];
+    if (variable_get('cron_safe_threshold', DRUPAL_CRON_DEFAULT_THRESHOLD) > static::MINIMUM_CRON_INTERVAL) {
+      $messages[] = t('Cron is not set to run frequently enough. <a href="@configure">Configure it</a> to run at least every 3 hours or disable automated cron and run it via an external scheduling system.', [
+        '@configure' => url('admin/config/system/cron'),
+      ]);
+    }
+    // Determine when cron last ran.
+    $cron_last = variable_get('cron_last');
+    if (!is_numeric($cron_last)) {
+      $cron_last = variable_get('install_time', 0);
+    }
+    if (REQUEST_TIME - $cron_last > static::MINIMUM_CRON_INTERVAL) {
+      $messages[] = t('Cron has not run recently. <a href="@configure">Configure it</a> to run at least every 3 hours or disable automated cron and run it via an external scheduling system.', [
+        '@configure' => url('admin/config/system/cron'),
+      ]);
+    }
+    return $messages;
+  }
+
+}
diff --git a/ReadinessCheckers/ReadinessCheckerManager.php b/ReadinessCheckers/ReadinessCheckerManager.php
index b149af9714b098150cc114ec7fa0df54276d291a..a6f25c96a66b4877d7a47f214f8d2a8458822650 100644
--- a/ReadinessCheckers/ReadinessCheckerManager.php
+++ b/ReadinessCheckers/ReadinessCheckerManager.php
@@ -23,6 +23,7 @@ class ReadinessCheckerManager {
    */
   protected static function getCheckers() {
     static::$checkers['warning'][0][] = 'BlacklistPhp72Versions';
+    static::$checkers['warning'][0][] = 'CronFrequency';
     static::$checkers['warning'][0][] = 'FileOwnership';
     static::$checkers['warning'][0][] = 'MissingProjectInfo';
     static::$checkers['warning'][0][] = 'ModifiedFiles';
diff --git a/automatic_updates.info b/automatic_updates.info
index 4640351748b8013bee2492f80a84440f69223a24..f3a980785757e64714eed0999c64412083fa0244 100644
--- a/automatic_updates.info
+++ b/automatic_updates.info
@@ -11,6 +11,7 @@ files[] = ModifiedFilesService.php
 files[] = ReadinessCheckers/ReadinessCheckerManager.php
 files[] = ReadinessCheckers/ReadinessCheckerInterface.php
 files[] = ReadinessCheckers/BlacklistPhp72Versions.php
+files[] = ReadinessCheckers/CronFrequency.php
 files[] = ReadinessCheckers/DiskSpace.php
 files[] = ReadinessCheckers/FileOwnership.php
 files[] = ReadinessCheckers/MissingProjectInfo.php