diff --git a/core/BackgroundJobs/CleanupBackgroundJobsJob.php b/core/BackgroundJobs/CleanupBackgroundJobsJob.php index 69f4eb8fed6..e81242fc6f0 100644 --- a/core/BackgroundJobs/CleanupBackgroundJobsJob.php +++ b/core/BackgroundJobs/CleanupBackgroundJobsJob.php @@ -18,6 +18,7 @@ use OCP\BackgroundJob\TimedJob; use OCP\IConfig; use OCP\IServerInfo; use Override; +use Psr\Log\LoggerInterface; class CleanupBackgroundJobsJob extends TimedJob { public function __construct( @@ -28,7 +29,7 @@ class CleanupBackgroundJobsJob extends TimedJob { ) { parent::__construct($time); $this->setInterval(60 * 60); - $this->setTimeSensitivity(IJob::TIME_INSENSITIVE); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); } #[Override] @@ -45,17 +46,24 @@ class CleanupBackgroundJobsJob extends TimedJob { if ($job->serverId !== $currentServerId) { continue; } + $output = []; + $result = 0; exec('ps -p ' . escapeshellarg((string)$job->pid) . ' -o cmd', $output, $result); - if (count($output) === 1 && $output[0] === 'CMD' && $result === 1) { + if (count($output) === 1 && current($output) === 'CMD' && $result === 1) { // Process doesn't exists anymore $maxDuration = (new DateTimeImmutable())->diff($job->startedAt); - $maxDuration = - ($maxDuration->format('%a') * 24 * 60 * 60 * 1000) - + ($maxDuration->format('%h') * 60 * 60 * 1000) - + ($maxDuration->format('%m') * 60 * 1000) - + ($maxDuration->format('%s') * 1000) - + (int)($maxDuration->format('%f') / 1000); + $maxDuration + = ($maxDuration->days * 24 * 60 * 60 * 1000) + + ($maxDuration->h * 60 * 60 * 1000) + + ($maxDuration->i * 60 * 1000) + + ($maxDuration->s * 1000) + + (int)($maxDuration->f * 1000); $this->jobRuns->finished($job->runId, $maxDuration, 0, JobStatus::CRASHED); + $this->logger->warning('No process matching PID {pid} found on server {serverId}. Job {runId} was marked as crashed', [ + 'pid' => $job->pid, + 'serverId' => $job->serverId, + 'runId' => $job->runId, + ]); } } } diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 7f18f4d7cc3..159d2b3abbf 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -1312,6 +1312,7 @@ return array( 'OC\\Core\\AppInfo\\ConfigLexicon' => $baseDir . '/core/AppInfo/ConfigLexicon.php', 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => $baseDir . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php', 'OC\\Core\\BackgroundJobs\\CheckForUserCertificates' => $baseDir . '/core/BackgroundJobs/CheckForUserCertificates.php', + 'OC\\Core\\BackgroundJobs\\CleanupBackgroundJobsJob' => $baseDir . '/core/BackgroundJobs/CleanupBackgroundJobsJob.php', 'OC\\Core\\BackgroundJobs\\CleanupLoginFlowV2' => $baseDir . '/core/BackgroundJobs/CleanupLoginFlowV2.php', 'OC\\Core\\BackgroundJobs\\ExpirePreviewsJob' => $baseDir . '/core/BackgroundJobs/ExpirePreviewsJob.php', 'OC\\Core\\BackgroundJobs\\GenerateMetadataJob' => $baseDir . '/core/BackgroundJobs/GenerateMetadataJob.php', @@ -2052,6 +2053,7 @@ return array( 'OC\\Repair' => $baseDir . '/lib/private/Repair.php', 'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php', 'OC\\Repair\\AddBruteForceCleanupJob' => $baseDir . '/lib/private/Repair/AddBruteForceCleanupJob.php', + 'OC\\Repair\\AddCleanupBackgroundJobsJob' => $baseDir . '/lib/private/Repair/AddCleanupBackgroundJobsJob.php', 'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => $baseDir . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php', 'OC\\Repair\\AddCleanupUpdaterBackupsJob' => $baseDir . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php', 'OC\\Repair\\AddMetadataGenerationJob' => $baseDir . '/lib/private/Repair/AddMetadataGenerationJob.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 9f739dbbca2..2376057d7c3 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -1353,6 +1353,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OC\\Core\\AppInfo\\ConfigLexicon' => __DIR__ . '/../../..' . '/core/AppInfo/ConfigLexicon.php', 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php', 'OC\\Core\\BackgroundJobs\\CheckForUserCertificates' => __DIR__ . '/../../..' . '/core/BackgroundJobs/CheckForUserCertificates.php', + 'OC\\Core\\BackgroundJobs\\CleanupBackgroundJobsJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/CleanupBackgroundJobsJob.php', 'OC\\Core\\BackgroundJobs\\CleanupLoginFlowV2' => __DIR__ . '/../../..' . '/core/BackgroundJobs/CleanupLoginFlowV2.php', 'OC\\Core\\BackgroundJobs\\ExpirePreviewsJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/ExpirePreviewsJob.php', 'OC\\Core\\BackgroundJobs\\GenerateMetadataJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/GenerateMetadataJob.php', @@ -2093,6 +2094,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php', 'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php', 'OC\\Repair\\AddBruteForceCleanupJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddBruteForceCleanupJob.php', + 'OC\\Repair\\AddCleanupBackgroundJobsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupBackgroundJobsJob.php', 'OC\\Repair\\AddCleanupDeletedUsersBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupDeletedUsersBackgroundJob.php', 'OC\\Repair\\AddCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddCleanupUpdaterBackupsJob.php', 'OC\\Repair\\AddMetadataGenerationJob' => __DIR__ . '/../../..' . '/lib/private/Repair/AddMetadataGenerationJob.php', diff --git a/lib/private/Repair.php b/lib/private/Repair.php index d25a12ccd9d..b323997f507 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -9,6 +9,7 @@ namespace OC; use OC\Repair\AddBruteForceCleanupJob; +use OC\Repair\AddCleanupBackgroundJobsJob; use OC\Repair\AddCleanupDeletedUsersBackgroundJob; use OC\Repair\AddCleanupUpdaterBackupsJob; use OC\Repair\AddMetadataGenerationJob; @@ -134,14 +135,14 @@ class Repair implements IOutput { } } - if (!($s instanceof IRepairStep)) { + if (!$s instanceof IRepairStep) { throw new \Exception("Repair step '$repairStep' is not of type \\OCP\\Migration\\IRepairStep"); } $repairStep = $s; } - if (($repairStep instanceof IRepairStepExpensive) && !$includeExpensive) { + if ($repairStep instanceof IRepairStepExpensive && !$includeExpensive) { $this->debug("Skipping expensive repair step '" . $repairStep::class . "'"); } else { $this->repairSteps[] = $repairStep; @@ -195,6 +196,7 @@ class Repair implements IOutput { Server::get(SanitizeAccountProperties::class), Server::get(AddMovePreviewJob::class), Server::get(ConfigKeyMigration::class), + Server::get(AddCleanupBackgroundJobsJob::class), ]; if ($includeExpensive) { diff --git a/lib/private/Setup.php b/lib/private/Setup.php index 55090a9eff8..74b0686dd7b 100644 --- a/lib/private/Setup.php +++ b/lib/private/Setup.php @@ -16,6 +16,7 @@ use InvalidArgumentException; use OC\AppFramework\Bootstrap\Coordinator; use OC\Authentication\Token\PublicKeyTokenProvider; use OC\Authentication\Token\TokenCleanupJob; +use OC\Core\BackgroundJobs\CleanupBackgroundJobsJob; use OC\Core\BackgroundJobs\ExpirePreviewsJob; use OC\Core\BackgroundJobs\GenerateMetadataJob; use OC\Core\BackgroundJobs\PreviewMigrationJob; @@ -532,6 +533,7 @@ class Setup { $jobList->add(GenerateMetadataJob::class); $jobList->add(PreviewMigrationJob::class); $jobList->add(ExpirePreviewsJob::class); + $jobList->add(CleanupBackgroundJobsJob::class); } /**