A simple flock doesn't always work all that well - the devil is in the details. And there is the issue that you miss a run of the script and have to wait another half hour for the next run.
I've used the Highlander, "There can be only one!" code pattern for forever, and it works really well:
https://www.perlmonks.org/?node_id=14260
You could change things to check on the status of your lock every minute or so for 15 minutes or whatever.
Also in module form,
https://metacpan.org/pod/App::Highlander
And much more updated:
https://medium.com/booking-com-development/highlander-b67172...
No need to attempt to stuff all this in a cronjob IMHO.