The software utility Cron is a time-based job scheduler in Unix-like computer operating systems. Users that set up and maintain software environments use Cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals. It typically automates system maintenance or administration—though its general-purpose nature makes it useful for things like downloading files from the Internet and downloading email at regular intervals. The origin of the name Cron is from the Greek word for time, χρόνος (Chronos).

What is Cron?
Cron is a Unix utility which executes commands or scripts automatically at a specified time and/or date. It is commonly used by system administrators to run scheduled maintenance tasks, checking emails and logs and such. It is great for handling both simple and complex routines which can be a pain to manage manually (life gets in the way for us all, it just happens and Cron is there to help xD). It can be used to run just about anything.

Cron permissions

These two files play an important role:

  • /etc/cron.allow – If this file exists, it must contain your username for you to use cron jobs.
  • /etc/cron.deny – If the cron.allow file does not exist but the /etc/cron.deny file does exist then, to use cron jobs, you must not be listed in the /etc/cron.deny file.

Note that if neither of these files exists then, depending on site-dependent configuration parameters, either only the superuser can use cron jobs, or all users can use cron jobs.

Timezone handling

Most cron implementations simply interpret crontab entries in the system time zone setting that the cron daemon runs under. This can be a source of dispute if a large multi-user machine has users in several time zones, especially if the system default timezone includes the potentially confusing DST. Thus, a cron implementation may as a special case recognize lines of the form “CRON_TZ=<timezone>” in user crontabs, interpreting subsequent crontab entries relative to that timezone.

Early versions

The cron in Version 7 Unix was a system service (later called a daemon) invoked from /etc/rc when the operating system entered multi-user mode. Its algorithm was straightforward:

  1. Read  /usr/lib/crontab
  2. Determine if any commands must run at the current date and time, and if so, run them as the superuser, root.
  3. Sleep for one minute
  4. Repeat from step 1.

This version of cron was basic and robust but it also consumed resources whether it found any work to do or not. In an experiment at Purdue University in the late 1970s to extend Cron’s service to all 100 users on a time-shared VAX, it was found to place too much load on the system.

Modern versions

With the advent of the GNU Project and Linux, new crons appeared. The most prevalent of these is the Vixie Cron, originally coded by Paul Vixie in 1987. Version 3 of Vixie Cron was released in late 1993. Version 4.1 was renamed to ISC Cron and was released in January 2004. Version 3, with some minor bugfixes, is used in most distributions of Linux and BSDs.

In 2007, Red Hat forked Vixie-cron 4.1 to the cronies project and included anacron 2.3 in 2009.

Other popular implementations include anacron and dcron. However, anacron is not an independent cron program. Another cron job must call it. dcron was made by DragonFly BSD founder Matt Dillon, and its maintainership was taken over by Jim Pryor in 2010. In 2003, Dale Mellor introduced mcron, a cron variant written in Guile which provides cross-compatibility with Vixie cron while also providing greater flexibility as it allows arbitrary scheme code to be used in scheduling calculations and job definitions. Since both the mcron daemon and the crontab files are usually written in scheme (though mcron also accepts traditional Vixie crontabs), the cumulative state of a user’s job queue is available to their job code, which may be scheduled to run iff the results of other jobs meet certain criteria. Mcron is deployed by default under the Guix package manager, which includes provisions (services) for the package manager to monadically emit mcron crontabs while both ensuring that packages needed for job execution are installed and that the corresponding crontabs correctly refer to them. A webcron solution schedules ring tasks to run on a regular basis wherever cron implementations are not available in a web hosting environment.

More information about Cyber Security Visit: