From: Marcela Mašláňová Date: Fri, 22 Jun 2012 09:14:58 +0000 (+0200) Subject: Preferred hour of start of the job. If the hour is missed job will be skipped. X-Git-Tag: cronie1.4.9~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4e7413a12ad5b1d5ef2588be8556da8094a56457;p=cronie Preferred hour of start of the job. If the hour is missed job will be skipped. --- diff --git a/anacron/global.h b/anacron/global.h index 0fe3f9b..a0efd4f 100644 --- a/anacron/global.h +++ b/anacron/global.h @@ -109,6 +109,9 @@ extern time_t start_sec; extern int range_start; extern int range_stop; +/* preferred hour for jobs */ +extern int preferred_hour; + /* Function prototypes */ /* main.c */ diff --git a/anacron/lock.c b/anacron/lock.c index 71aae09..755bca6 100644 --- a/anacron/lock.c +++ b/anacron/lock.c @@ -156,6 +156,12 @@ consider_job(job_rec *jr) jobtime = start_sec + jr->delay * 60; t = localtime(&jobtime); + if (!now && preferred_hour != -1 && t->tm_hour != preferred_hour) { + Debug(("The job's %s preferred hour %d was missed, skipping the job.", jr->ident, preferred_hour)); + xclose (jr->timestamp_fd); + return 0; + } + if (!now && range_start != -1 && range_stop != -1 && (t->tm_hour < range_start || t->tm_hour >= range_stop)) { diff --git a/anacron/main.c b/anacron/main.c index 00c6a4e..61636a6 100644 --- a/anacron/main.c +++ b/anacron/main.c @@ -61,6 +61,7 @@ static volatile int got_sigalrm, got_sigchld, got_sigusr1; int running_jobs, running_mailers; /* , number of */ int range_start = -1; int range_stop = -1; +int preferred_hour = -1; static void print_version() diff --git a/anacron/readtab.c b/anacron/readtab.c index b475be7..96a8f99 100644 --- a/anacron/readtab.c +++ b/anacron/readtab.c @@ -251,6 +251,7 @@ parse_tab_line(char *line) char *command; char *from; char *to; + char *pref_hour; /* an empty line? */ r = match_rx("^[ \t]*($|#)", line, 0); @@ -290,6 +291,16 @@ parse_tab_line(char *line) } else goto reg_invalid; } + if (strncmp(env_var, "PREFERRED_HOUR", 14) == 0) { + r = match_rx("^([[:digit:]]+)$", value, 1, &pref_hour); + if ((r != -1) || (pref_hour != NULL)) { + preferred_hour = atoi(pref_hour); + if ((preferred_hour < 0) || (preferred_hour > 24)) { + preferred_hour = -1; + goto reg_invalid; + } + } + } register_env(env_var, value); return; }