raiseConfigError("Invalid task {0}: must define either interval or crontab-spec".format(task["name"]))
iftask["interval"]:
iftask["spec"]:
raiseConfigError("Invalid task {0}: cannot use interval and crontab-spec at the same time".format(task["name"]))
ifnotre.match(r"^\d+[mdh]?$",task["interval"]):
raise(ConfigError("Invalid interval {0} in task {1}: interval should be a number optionally followed by m, h, or d".format(task["name"],task["interval"])))
else:
# Check if values are within allowed range
value,suffix=split_interval(task["interval"])
ifnotsuffixorsuffix=="m":
ifvalue>60:
raiseConfigError("Invalid task {0}: interval in minutes must not exceed 60".format(task["name"]))
elifsuffix=="h":
ifvalue>24:
raiseConfigError("Invalid task {0}: interval in hours must not exceed 24".format(task["name"]))
elifsuffix=="d":
ifvalue>31:
raiseConfigError("Invalid task {0}: interval in days must not exceed 31".format(task["name"]))
ifnottask["executable"]:
raiseConfigError("Invalid task {0}: executable is not defined".format(task["name"]))