]> granicus.if.org Git - cronie/commitdiff
Preferred hour of start of the job. If the hour is missed job will be skipped.
authorMarcela Mašláňová <mmaslano@redhat.com>
Fri, 22 Jun 2012 09:14:58 +0000 (11:14 +0200)
committerMarcela Mašláňová <mmaslano@redhat.com>
Fri, 22 Jun 2012 12:12:54 +0000 (14:12 +0200)
anacron/global.h
anacron/lock.c
anacron/main.c
anacron/readtab.c

index 0fe3f9bb582050bd4747edd776de4afeb6f03783..a0efd4f4c5a9f1072e221499fa4b9723b323a5b6 100644 (file)
@@ -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 */
index 71aae09251d2367ef87e5b7e470189a9d7cdec92..755bca6a68c042f5b512a176664694a8aa387bac 100644 (file)
@@ -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))
        {
index 00c6a4e9dc1b2e41daa1c3e71f453d4a7adcedd1..61636a62b3b8d1af7c5c6b593caf750694c88834 100644 (file)
@@ -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()
index b475be76b7b647ac767029bcdc086665b4a67341..96a8f99e10e46fad32466ae2cee53b3a93590393 100644 (file)
@@ -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;
     }