Crontab is specifically built for this - so absolutely use it.
I have cron tasks that occasionally take longer than their period. To combat this I create a lock file when the task starts, and delete it when it ends. If the file already exists when the task starts, then a previous iteration is still running, and the task just ends.