2008-12-04 16:48:27 +01:00
|
|
|
{pkgs, config, ...}:
|
2007-01-10 18:09:00 +01:00
|
|
|
|
2008-11-09 17:44:43 +01:00
|
|
|
###### interface
|
2008-02-01 13:01:27 +01:00
|
|
|
let
|
2008-11-09 17:44:43 +01:00
|
|
|
inherit (pkgs.lib) mkOption;
|
2008-02-01 13:01:27 +01:00
|
|
|
|
2008-11-09 17:44:43 +01:00
|
|
|
options = {
|
|
|
|
services = {
|
|
|
|
cron = {
|
|
|
|
|
|
|
|
mailto = mkOption {
|
|
|
|
default = "";
|
|
|
|
description = " The job output will be mailed to this email address. ";
|
|
|
|
};
|
|
|
|
|
|
|
|
systemCronJobs = mkOption {
|
|
|
|
default = [];
|
|
|
|
example = [
|
|
|
|
"* * * * * test ls -l / > /tmp/cronout 2>&1"
|
|
|
|
"* * * * * eelco echo Hello World > /home/eelco/cronout"
|
|
|
|
];
|
|
|
|
description = ''
|
|
|
|
A list of Cron jobs to be appended to the system-wide
|
|
|
|
crontab. See the manual page for crontab for the expected
|
|
|
|
format. If you want to get the results mailed you must setuid
|
|
|
|
sendmail. See <option>security.setuidOwners</option>
|
2009-04-03 14:05:15 +02:00
|
|
|
|
2009-04-03 21:48:45 +02:00
|
|
|
If neither /var/cron/cron.deny nor /var/cron/cron.allow exist only root
|
|
|
|
will is allowed to have its own crontab file. The /var/cron/cron.deny file
|
|
|
|
is created automatically for you. So every user can use a crontab.
|
2008-11-09 17:44:43 +01:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
in
|
|
|
|
|
|
|
|
###### implementation
|
|
|
|
let
|
2008-12-07 13:27:46 +01:00
|
|
|
inherit (config.services) jobsTags;
|
|
|
|
|
2008-02-01 13:35:51 +01:00
|
|
|
# Put all the system cronjobs together.
|
|
|
|
systemCronJobs =
|
2008-11-09 17:44:53 +01:00
|
|
|
config.services.cron.systemCronJobs;
|
2008-02-01 13:01:27 +01:00
|
|
|
|
|
|
|
systemCronJobsFile = pkgs.writeText "system-crontab" ''
|
|
|
|
SHELL=${pkgs.bash}/bin/sh
|
2008-02-01 13:35:51 +01:00
|
|
|
PATH=${pkgs.coreutils}/bin:${pkgs.findutils}/bin:${pkgs.gnused}/bin:${pkgs.su}/bin
|
2008-10-26 00:03:12 +02:00
|
|
|
MAILTO="${config.services.cron.mailto}"
|
2008-02-01 13:01:27 +01:00
|
|
|
${pkgs.lib.concatStrings (map (job: job + "\n") systemCronJobs)}
|
|
|
|
'';
|
|
|
|
in
|
2008-11-09 17:44:43 +01:00
|
|
|
|
2007-01-10 18:09:00 +01:00
|
|
|
{
|
2008-11-09 17:44:43 +01:00
|
|
|
require = [
|
2009-05-25 01:13:23 +02:00
|
|
|
# ../upstart-jobs/default.nix # config.services.extraJobs
|
2009-05-20 01:14:45 +02:00
|
|
|
# ? # config.time.timeZone
|
|
|
|
# ? # config.environment.etc
|
|
|
|
# ? # config.environment.extraPackages
|
2008-11-09 17:44:43 +01:00
|
|
|
options
|
2008-02-01 13:01:27 +01:00
|
|
|
];
|
2007-01-10 18:09:00 +01:00
|
|
|
|
2008-11-09 17:44:43 +01:00
|
|
|
environment = {
|
|
|
|
etc = [
|
|
|
|
# The system-wide crontab.
|
|
|
|
{ source = systemCronJobsFile;
|
|
|
|
target = "crontab";
|
|
|
|
mode = "0600"; # Cron requires this.
|
|
|
|
}
|
|
|
|
];
|
2007-01-10 18:09:00 +01:00
|
|
|
|
2009-10-07 19:14:25 +02:00
|
|
|
systemPackages = [pkgs.cron];
|
2008-11-09 17:44:43 +01:00
|
|
|
};
|
2008-02-01 13:01:27 +01:00
|
|
|
|
2008-11-09 17:44:43 +01:00
|
|
|
services = {
|
|
|
|
extraJobs = [{
|
|
|
|
name = "cron";
|
2008-02-01 14:56:36 +01:00
|
|
|
|
2008-11-09 17:44:43 +01:00
|
|
|
job = ''
|
|
|
|
description "Cron daemon"
|
|
|
|
|
2009-01-02 17:06:41 +01:00
|
|
|
start on startup
|
|
|
|
stop on shutdown
|
2008-11-09 17:44:43 +01:00
|
|
|
|
|
|
|
# Needed to interpret times in the local timezone.
|
|
|
|
env TZ=${config.time.timeZone}
|
|
|
|
|
2009-04-03 17:14:00 +02:00
|
|
|
start script
|
|
|
|
mkdir -m 710 -p /var/cron
|
|
|
|
|
|
|
|
# By default, allow all users to create a crontab. This
|
|
|
|
# is denoted by the existence of an empty cron.deny file.
|
|
|
|
if ! test -e /var/cron/cron.allow -o -e /var/cron/cron.deny; then
|
|
|
|
touch /var/cron/cron.deny
|
|
|
|
fi
|
|
|
|
end script
|
|
|
|
|
2008-11-09 17:44:43 +01:00
|
|
|
respawn ${pkgs.cron}/sbin/cron -n
|
|
|
|
'';
|
|
|
|
}];
|
|
|
|
};
|
2007-01-10 18:09:00 +01:00
|
|
|
}
|