diff --git a/rules_scheduler/rules_scheduler.drush.inc b/rules_scheduler/rules_scheduler.drush.inc
new file mode 100644
index 0000000..5e37e46
--- /dev/null
+++ b/rules_scheduler/rules_scheduler.drush.inc
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * @file
+ * Rules Scheduler Drush integration.
+ */
+
+/**
+ * Implements hook_drush_command().
+ */
+function rules_scheduler_drush_command() {
+  $items = array();
+
+  $items['rules-scheduler-tasks'] = array(
+    'description' => dt('Checks for scheduled tasks to be added to the queue.'),
+    'options' => array(
+      'claim' => dt('Optionally claim tasks from the queue to work on. Any value set will override the default time spent on this queue.'),
+    ),
+    'drupal dependencies' => array('rules', 'rules_scheduler'),
+    'aliases' => array('rusch'),
+    'examples' => array(
+      'drush rusch' => dt('Add scheduled tasks to the queue.'),
+      'drush rusch --claim' => dt('Add scheduled tasks to the queue and claim items for the default amount of time.'),
+      'drush rusch --claim=30' => dt('Add schedules tasks to the queue and claim items for 30 seconds.'),
+    ),
+  );
+
+  return $items;
+}
+
+/**
+ * Implements hook_drush_help().
+ */
+function rules_scheduler_drush_help($section) {
+  switch ($section) {
+    case 'drush:rules-scheduler-tasks':
+      return dt('Checks for scheduled tasks to be added the queue. Can optionally claim tasks from the queue to work on.');
+  }
+}
+
+/**
+ * Command callback for processing the rules_scheduler_tasks queue.
+ *
+ * @see rules_scheduler_cron_queue_info().
+ * @see rules_scheduler_cron().
+ */
+function drush_rules_scheduler_tasks() {
+  if (rules_scheduler_queue_tasks()) {
+    // hook_exit() is not invoked for drush runs, so register it as shutdown
+    // callback for logging the rules log to the watchdog.
+    drupal_register_shutdown_function('rules_exit');
+    // Clear the log before running tasks via the queue to avoid logging
+    // unrelated logs from previous operations.
+    RulesLog::logger()->clear();
+    drush_log(dt('Added scheduled tasks to the queue.'), 'success');
+  }
+
+  $claim = drush_get_option('claim', FALSE);
+  if ($claim) {
+    // Fetch the queue information and let other modules alter it.
+    $queue_name = 'rules_scheduler_tasks';
+    $info = module_invoke('rules_scheduler', 'cron_queue_info');
+    drupal_alter('cron_queue_info', $info);
+
+    $function = $info[$queue_name]['worker callback'];
+    // The drush option can override the default process time.
+    $time = is_numeric($claim) ? (int) $claim : $info[$queue_name]['time'];
+    $end = time() + $time;
+    // Claim items and process the queue.
+    $queue = DrupalQueue::get($queue_name);
+    $claimed = 0;
+    while (time() < $end && ($item = $queue->claimItem())) {
+      $function($item->data);
+      $queue->deleteItem($item);
+      $claimed++;
+    }
+    if ($claimed) {
+      drush_log(dt('Claimed and worked on !claimed scheduled tasks for up to !time seconds.', array('!claimed' => $claimed, '!time' => $time)), 'success');
+    }
+  }
+}
diff --git a/rules_scheduler/rules_scheduler.module b/rules_scheduler/rules_scheduler.module
index e1c5318..d335032 100644
--- a/rules_scheduler/rules_scheduler.module
+++ b/rules_scheduler/rules_scheduler.module
@@ -11,24 +11,7 @@ define('RULES_SCHEDULER_PATH', 'admin/config/workflow/rules/schedule');
  * Implements hook_cron().
  */
 function rules_scheduler_cron() {
-  // Limit adding tasks to 1000 per cron run.
-  $result = db_select('rules_scheduler', 'r', array('fetch' => PDO::FETCH_ASSOC))
-    ->fields('r')
-    ->condition('date', time(), '<=')
-    ->orderBy('date')
-    ->range(0, 1000)
-    ->execute();
-
-  $queue = DrupalQueue::get('rules_scheduler_tasks');
-  foreach ($result as $task) {
-    // Add the task to the queue and remove the entry afterwards.
-    if ($queue->createItem($task)) {
-      $task_created = TRUE;
-      rules_scheduler_task_handler($task)->afterTaskQueued();
-    }
-  }
-
-  if (!empty($task_created)) {
+  if (rules_scheduler_queue_tasks()) {
     // hook_exit() is not invoked for cron runs, so register it as shutdown
     // callback for logging the rules log to the watchdog.
     drupal_register_shutdown_function('rules_exit');
@@ -176,6 +159,33 @@ function rules_scheduler_schedule_task($task) {
 }
 
 /**
+ * Queue tasks that are ready for execution.
+ *
+ * @return boolean
+ *   Returns TRUE if any queue items where created, otherwise FALSE.
+ */
+function rules_scheduler_queue_tasks() {
+  $items_created = FALSE;
+  // Limit adding tasks to 1000 per cron run.
+  $result = db_select('rules_scheduler', 'r', array('fetch' => PDO::FETCH_ASSOC))
+    ->fields('r')
+    ->condition('date', time(), '<=')
+    ->orderBy('date')
+    ->range(0, 1000)
+    ->execute();
+
+  $queue = DrupalQueue::get('rules_scheduler_tasks');
+  foreach ($result as $task) {
+    // Add the task to the queue and remove the entry afterwards.
+    if ($queue->createItem($task)) {
+      $items_created = TRUE;
+      rules_scheduler_task_handler($task)->afterTaskQueued();
+    }
+  }
+  return $items_created;
+}
+
+/**
  * Implements hook_rules_config_delete().
  */
 function rules_scheduler_rules_config_delete($rules_config) {
