cron(8) mis-feature with @reboot long after system startup

Jason Hellenthal jhell at DataIX.net
Sat Nov 26 19:00:48 UTC 2011



On Sat, Nov 26, 2011 at 06:43:38AM +0100, Michael Ross wrote:
> Am 26.11.2011, 06:11 Uhr, schrieb Jason Hellenthal <jhell at dataix.net>:
> 
> >
> >
> > On Fri, Nov 25, 2011 at 10:36:40PM +0100, Christian Kastner wrote:
> >> Hi,
> >>
> >> On 2011-11-25 08:02, Jason Hellenthal wrote:
> >> > So with that said... is there a way we could actually make this run  
> >> @reboot only ?
> >>
> >> Debian's cron[0] and Fedora's cronie[1] have solved this by touching a
> >> file on first startup and running @reboot only when this file does not
> >> yet exist.
> >>
> >> Note that while [0] may point to other patches that might be of interest
> >> to FreeBSD, they are still WIP (as evident from the linked patch) as we
> >> are still in the process of quiltifying our current code base.
> >>
> >
> > While this sounds like a perfectly sane way to handle the problem at  
> > hand this also introduces a need to write some cleanup code to take care  
> > of the file semantics. I think comparing daemon start times to the time  
> > a system was booted or similiar would alleviate the need for all that.  
> > Maybe a flag for @reboot "-s <seconds>" seconds after boottime to allow  
> > running @reboot jobs. And set the default to 3600 seconds. At least this  
> > would allow adjustment for those startup processes that may take some  
> > considerable time before multiuser mode is entered.
> >
> > Just some thought.
> >
> > I really don't think we need to go the route of using files to store  
> > information when there is enough information available already via  
> > syscall's.
> 
> If system startup were to be unusually delayed (dhcp or nfs trouble eg),  
> $time_period might have passed when cron starts, so there would have to be  
> some notifying mechanism for @reboot jobs not being run, and operator  
> action would be required.
> 

I agree but also disagree. 1 hour or 3600 seconds is plenty of time to wait for the "@reboot" extension scripts to fire.

> One could "cron restart" within $time_period and run @reboot twice.
> 
> I don't like this idea.
> 
> In my bikeshed, @reboot should be called @cronstart, but it shouldn't  
> because of uniformity across OSs.
> The cron manpage should reflect the actual behaviour (already patched in  
> svn),
> and all "definitely only on boot"-scripts should go in local/etc/rc.d.
> 

This has nothing to do with rc.d. This is a cron(8) problem only.


More information about the freebsd-hackers mailing list