Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145293836
D19924.id56415.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D19924.id56415.diff
View Options
Index: head/usr.sbin/cron/cron/database.c
===================================================================
--- head/usr.sbin/cron/cron/database.c
+++ head/usr.sbin/cron/cron/database.c
@@ -259,6 +259,8 @@
struct passwd *pw = NULL;
int crontab_fd = OK - 1;
user *u;
+ entry *e;
+ time_t now;
if (strcmp(fname, SYS_NAME) && !(pw = getpwnam(uname))) {
/* file doesn't have a user in passwd file.
@@ -307,6 +309,21 @@
u = load_user(crontab_fd, pw, fname);
if (u != NULL) {
u->mtime = statbuf->st_mtime;
+ /*
+ * TargetTime == 0 when we're initially populating the database,
+ * and TargetTime > 0 any time after that (i.e. we're reloading
+ * cron.d/ files because they've been created/modified). In the
+ * latter case, we should check for any interval jobs and run
+ * them 'n' seconds from the time the job was loaded/reloaded.
+ * Otherwise, they will not be run until cron is restarted.
+ */
+ if (TargetTime != 0) {
+ now = time(NULL);
+ for (e = u->crontab; e != NULL; e = e->next) {
+ if ((e->flags & INTERVAL) != 0)
+ e->lastexit = now;
+ }
+ }
link_user(new_db, u);
}
Index: head/usr.sbin/cron/crontab/crontab.5
===================================================================
--- head/usr.sbin/cron/crontab/crontab.5
+++ head/usr.sbin/cron/crontab/crontab.5
@@ -17,7 +17,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 15, 2019
+.Dd April 19, 2019
.Dt CRONTAB 5
.Os
.Sh NAME
@@ -245,12 +245,14 @@
The
.Sq @
symbol followed by a numeric value has a special notion of running
-a job that much seconds after completion of previous invocation of
+a job that many seconds after completion of the previous invocation of
the job.
Unlike regular syntax, it guarantees not to overlap two or more
-invocations of the same job.
-The first run is scheduled specified amount of seconds after cron
-has started.
+invocations of the same job during normal cron execution.
+Note, however, that overlap may occur if the job is running when the file
+containing the job is modified and subsequently reloaded.
+The first run is scheduled for the specified number of seconds after cron
+is started or the crontab entry is reloaded.
.Sh EXAMPLE CRON FILE
.Bd -literal
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 19, 2:21 AM (4 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28864545
Default Alt Text
D19924.id56415.diff (2 KB)
Attached To
Mode
D19924: cron(8): schedule interval jobs that get loaded during execution
Attached
Detach File
Event Timeline
Log In to Comment