Cronjob cancel_unfilled_holds.pl should skip already cancelled holds. Currently it searches : my $holds = Koha::Holds->search( { branchcode => $branch } )->unfilled(); Verbose logs shows all cancelled holds from previous days. Just skip ?