application/Espo/Core/Utils/Cron/Job.php
public function removePendingJobDuplicates()
    {
        $pdo = $this->getEntityManager()->getPDO();

        $query = "
            SELECT scheduled_job_id
            FROM job
            WHERE
                scheduled_job_id IS NOT NULL AND
                `status` = '".CronManager::PENDING."' AND
                execute_time <= '".date('Y-m-d H:i:s')."' AND
                target_id IS NULL AND
                deleted = 0
            GROUP BY scheduled_job_id
            HAVING count( * ) > 1
            ORDER BY MAX(execute_time) ASC
        ";
        $sth = $pdo->prepare($query);
        $sth->execute();

        $duplicateJobList = $sth->fetchAll(PDO::FETCH_ASSOC);

        foreach ($duplicateJobList as $row) {
            if (!empty($row['scheduled_job_id'])) {

                $query = "
                    SELECT id FROM `job`
                    WHERE
                        scheduled_job_id = ".$pdo->quote($row['scheduled_job_id'])."
                        AND `status` = '" . CronManager::PENDING ."'
                        ORDER BY execute_time
                        DESC LIMIT 1, 100000
                    ";
                $sth = $pdo->prepare($query);
                $sth->execute();
                $jobIdList = $sth->fetchAll(PDO::FETCH_COLUMN);

                if (empty($jobIdList)) {
                    continue;
                }

                $quotedJobIdList = [];
                foreach ($jobIdList as $jobId) {
                    $quotedJobIdList[] = $pdo->quote($jobId);
                }

                $update = "
                    UPDATE job
                    SET deleted = 1
                    WHERE
                        id IN (".implode(", ", $quotedJobIdList).")
                ";

                $sth = $pdo->prepare($update);
                $sth->execute();
            }
        }
    }
public function removePendingJobDuplicates()
    {
        $pdo = $this->getEntityManager()->getPDO();

        $query = "
            SELECT scheduled_job_id
            FROM job
            WHERE
                scheduled_job_id IS NOT NULL AND
                `status` = '".CronManager::PENDING."' AND
                execute_time <= '".date('Y-m-d H:i:s')."' AND
                target_id IS NULL AND
                deleted = 0
            GROUP BY scheduled_job_id
            HAVING count( * ) > 1
            ORDER BY MAX(execute_time) ASC
        ";
        $sth = $pdo->prepare($query);
        $sth->execute();

        $duplicateJobList = $sth->fetchAll(PDO::FETCH_ASSOC);

        foreach ($duplicateJobList as $row) {
            if (!empty($row['scheduled_job_id'])) {

                $query = "
                    SELECT id FROM `job`
                    WHERE
                        scheduled_job_id = ".$pdo->quote($row['scheduled_job_id'])."
                        AND `status` = '" . CronManager::PENDING ."'
                        ORDER BY execute_time
                        DESC LIMIT 1, 100000
                    ";
                $sth = $pdo->prepare($query);
                $sth->execute();
                $jobIdList = $sth->fetchAll(PDO::FETCH_COLUMN);

                if (empty($jobIdList)) {
                    continue;
                }

                $quotedJobIdList = [];
                foreach ($jobIdList as $jobId) {
                    $quotedJobIdList[] = $pdo->quote($jobId);
                }

                $update = "
                    UPDATE job
                    SET deleted = 1
                    WHERE
                        id IN (".implode(", ", $quotedJobIdList).")
                ";

                $sth = $pdo->prepare($update);
                $sth->execute();
            }
        }
    }
public function removePendingJobDuplicates ( ) { $ pdo = $ this -> getEntityManager ( ) -> getPDO ( ) ; $ query = "
            SELECT scheduled_job_id
            FROM job
            WHERE
                scheduled_job_id IS NOT NULL AND
                `status` = '" . CronManager :: PENDING . "' AND
                execute_time <= '" . date ( 'Y-m-d H:i:s' ) . "' AND
                target_id IS NULL AND
                deleted = 0
            GROUP BY scheduled_job_id
            HAVING count( * ) > 1
            ORDER BY MAX(execute_time) ASC
        " ; $ sth = $ pdo -> prepare ( $ query ) ; $ sth -> execute ( ) ; $ duplicateJobList = $ sth -> fetchAll ( PDO :: FETCH_ASSOC ) ; foreach ( $ duplicateJobList as $ row ) { if ( ! empty ( $ row [ 'scheduled_job_id' ] ) ) { $ query = "
                    SELECT id FROM `job`
                    WHERE
                        scheduled_job_id = " . $ pdo -> quote ( $ row [ 'scheduled_job_id' ] ) . "
                        AND `status` = '" . CronManager :: PENDING . "'
                        ORDER BY execute_time
                        DESC LIMIT 1, 100000
                    " ; $ sth = $ pdo -> prepare ( $ query ) ; $ sth -> execute ( ) ; $ jobIdList = $ sth -> fetchAll ( PDO :: FETCH_COLUMN ) ; if ( empty ( $ jobIdList ) ) { continue ; } $ quotedJobIdList = [ ] ; foreach ( $ jobIdList as $ jobId ) { $ quotedJobIdList [ ] = $ pdo -> quote ( $ jobId ) ; } $ update = "
                    UPDATE job
                    SET deleted = 1
                    WHERE
                        id IN (" . implode ( ", " , $ quotedJobIdList ) . ")
                " ; $ sth = $ pdo -> prepare ( $ update ) ; $ sth -> execute ( ) ; } } }
Remove pending duplicate jobs, no need to run twice the same job

@return void
Remove pending duplicate jobs no need to run twice the same job