Don't run schedules when a server is suspended or installing; closes #4008

This commit is contained in:
DaneEveritt 2022-05-04 20:41:53 -04:00
parent ab37ee8633
commit b07fdc100c
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
3 changed files with 46 additions and 1 deletions

View file

@ -7,6 +7,7 @@ use Throwable;
use Illuminate\Console\Command;
use Pterodactyl\Models\Schedule;
use Illuminate\Support\Facades\Log;
use Illuminate\Database\Eloquent\Builder;
use Pterodactyl\Services\Schedules\ProcessScheduleService;
class ProcessRunnableCommand extends Command
@ -26,7 +27,9 @@ class ProcessRunnableCommand extends Command
*/
public function handle()
{
$schedules = Schedule::query()->with('tasks')
$schedules = Schedule::query()
->with('tasks')
->whereRelation('server', fn (Builder $builder) => $builder->whereNull('status'))
->where('is_active', true)
->where('is_processing', false)
->whereRaw('next_run_at <= NOW()')

View file

@ -61,6 +61,16 @@ class RunTaskJob extends Job implements ShouldQueue
}
$server = $this->task->server;
// If we made it to this point and the server status is not null it means the
// server was likely suspended or marked as reinstalling after the schedule
// was queued up. Just end the task right now — this should be a very rare
// condition.
if (!is_null($server->status)) {
$this->failed();
return;
}
// Perform the provided task against the daemon.
try {
switch ($this->task->action) {