If I have a crontab job that runs, for instance, every hour, but that job may take more than an hour to complete, will the next job fail to run?
No, cron scripts run parallelly, if you do not implement some locking mechanism.
See Quick-and-dirty way to ensure only one instance of a shell script is running at a time and Correct locking in shell scripts? for possible solutions.
Before a job runs, you can arrange that a "pre" function is called. This function may decide not to run the job (by returning "false").
One use for this is to prevent a particular job from running if there is already an instance of the same job running:
job "only one" pre (Whentools.one ()) every 10 seconds : << # Takes longer than 10 seconds to run, but 'Whentools.one ()' # will ensure only one is ever running. sleep 11 >>
(It also provides
Whentools.max n, allowing
n instances of the job to run. By default, it works like Cron.)