<?php

use Miniflux\Handler;
use Miniflux\Model;
use Miniflux\Session\SessionStorage;
use Pheanstalk\Pheanstalk;

require __DIR__.'/app/common.php';

if (php_sapi_name() !== 'cli') {
    die('This script can run only from the command line.'.PHP_EOL);
}

$connection = new Pheanstalk(BEANSTALKD_HOST);
$session = SessionStorage::getInstance();

while ($job = $connection->reserveFromTube(BEANSTALKD_QUEUE)) {
    $payload = unserialize($job->getData());
    $start_time = microtime(true);

    echo 'Processing feed_id=', $payload['feed_id'], ' for user_id=', $payload['user_id'];
    $user = Model\User\get_user_by_id($payload['user_id']);

    if (empty($user)) {
        echo ', user not found (removed?)'.PHP_EOL;
    } else {
        $session->flush();
        $session->setUser($user);

        Handler\Feed\update_feed($payload['user_id'], $payload['feed_id']);
        Model\Item\autoflush_read($payload['user_id']);
        Model\Item\autoflush_unread($payload['user_id']);

        echo ', duration='.(microtime(true) - $start_time).' seconds', PHP_EOL;

        Miniflux\Helper\write_debug_file();
    }

    $connection->delete($job);
}

<?php

use Miniflux\Handler;
use Miniflux\Model;
use Miniflux\Session\SessionStorage;
use Pheanstalk\Pheanstalk;

require __DIR__.'/app/common.php';

if (php_sapi_name() !== 'cli') {
    die('This script can run only from the command line.'.PHP_EOL);
}

$connection = new Pheanstalk(BEANSTALKD_HOST);
$session = SessionStorage::getInstance();

while ($job = $connection->reserveFromTube(BEANSTALKD_QUEUE)) {
    $payload = unserialize($job->getData());
    $start_time = microtime(true);

    echo 'Processing feed_id=', $payload['feed_id'], ' for user_id=', $payload['user_id'];

    $session->flush();
    $session->setUser(Model\User\get_user_by_id($payload['user_id']));

    Handler\Feed\update_feed($payload['user_id'], $payload['feed_id']);
    Model\Item\autoflush_read($payload['user_id']);
    Model\Item\autoflush_unread($payload['user_id']);

    echo ', duration='.(microtime(true) - $start_time).' seconds', PHP_EOL;

    Miniflux\Helper\write_debug_file();
    $connection->delete($job);
}

--- 
+++ 
@@ -19,16 +19,22 @@
     $start_time = microtime(true);
 
     echo 'Processing feed_id=', $payload['feed_id'], ' for user_id=', $payload['user_id'];
+    $user = Model\User\get_user_by_id($payload['user_id']);
 
-    $session->flush();
-    $session->setUser(Model\User\get_user_by_id($payload['user_id']));
+    if (empty($user)) {
+        echo ', user not found (removed?)'.PHP_EOL;
+    } else {
+        $session->flush();
+        $session->setUser($user);
 
-    Handler\Feed\update_feed($payload['user_id'], $payload['feed_id']);
-    Model\Item\autoflush_read($payload['user_id']);
-    Model\Item\autoflush_unread($payload['user_id']);
+        Handler\Feed\update_feed($payload['user_id'], $payload['feed_id']);
+        Model\Item\autoflush_read($payload['user_id']);
+        Model\Item\autoflush_unread($payload['user_id']);
 
-    echo ', duration='.(microtime(true) - $start_time).' seconds', PHP_EOL;
+        echo ', duration='.(microtime(true) - $start_time).' seconds', PHP_EOL;
 
-    Miniflux\Helper\write_debug_file();
+        Miniflux\Helper\write_debug_file();
+    }
+
     $connection->delete($job);
 }
Handle the fact that a user can be removed but have feeds in queue
