SDB:Cron

(重定向自 )
跳转到:导航搜索
使用 cron 任务表,用户可以安排自己的基于时间的任务。

设置 cron 任务的位置和方法

有几个位置和方法可以安排您自己的 cron 任务。 有系统 crontab,例如 /etc/crontab 和 /etc/cron.d/ 目录,它们只能使用 root(但也可以为用户定义任务),以及通过 crontab -e 命令可供普通用户使用的用户 crontab。 在所有提到的情况下,您必须使用 crontab 定义,请参阅 字段。 如果您符合 每小时、分钟、每周或每月周期,则无需使用 crontab 定义。

crontab 字段

每行中每个字段的含义在上面的描述中涵盖(它也可能包含更多选项和字段 = 阅读全文)

分钟 小时 月份中的某天 月份 星期几 要执行的命令
* * * * * 要执行的命令

好吧,最简单的 cron 任务定义的含义并不那么简单 :)(命令将在每个小时的第一个分钟执行 00:01、01:01、02:01、03:01 ... 等)

1 * * * *  /path/to/command

更有趣的示例使用斜杠 '/' 字符来定义步长(每 10 分钟执行一次命令)

*/10 * * * *  /path/to/command

在 crontab 中,您还可以使用范围,使用 '-' 字符(每周工作日 7:30 执行)

30 7 * * 1-5 echo "Wake up, it's morning, go to work!" | sendmail username

也允许带有数字集合的列表(在第一和第十五执行)

* * 1,15 * *  /path/to/command

对于星期几,您还可以使用:“Sun”、“Mon”、“Tue”、“Wed”、“Thu”、“Fri”、“Sat”、“Sun”)对于月份:“Jan”、“Feb”、“Mar”、“Apr”、“May”、“Jun”、“Jul”、“Aug”、“Sep”、“Oct”、“Nov”、“Dec”。

每周四下午 3:00 执行

0 15 * * * Thu echo "Hey! You have team meeting" | sendmail username

在第一和第十五以及每个星期天执行

* * 1,15 * Sun /path/to/command

如果 crontab 所有者的 uid 为 0(root),他还可以使用特殊选项来防止 cron 写入 syslog 消息,关于执行的命令; 如果您想使用此选项,请使用 '-' 作为 crontab 条目的第一个字符

- 1 * * * * username /usr/bin/test

crontab -e 命令

这是用户定义 cron 任务的最常见方法。 如果您想编辑 cron 任务,只需使用 crontab -e 命令。 它将打开首选(export EDITOR=vim)编辑器,其中包含已定义的 cronjob。 每行代表一个 cron 任务定义。 使用 crontab 命令,您还可以列出您的用户 cronjob crontab -l
Crontab 定义位于 /var/spool/cron/tabs/
如果您手动检查用户 crontab 文件,您会发现我们的用户 crontab 中仍然存在僵尸

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.XXXXR637JH installed on Tue Apr  6 17:46:35 2010)
# (Cronie version 1.4.4)

/etc/cron.d

这是为您的软件包创建 cron 任务规则的位置,并且您需要确切的执行日期/时间。 您的 crontab 规则可以是普通文件、符号链接或硬链接。 它必须由 root 拥有(也仅允许 root 写入)且不可执行。
在默认的 openSUSE 安装之后,您可以看到由一些软件包拥有的 crontab

ll /etc/cron.d/
total 8
-rw-r--r-- 1 root root  63 2009-10-13 19:44 novell.com-suse_register
-rw-r--r-- 1 root root 268 2009-09-12 00:19 smolt

Cron job 规则在 syscrondir 中不由 cron 软件包本身拥有,例如:

# rpm -qf /etc/cron.d/smolt
smolt-1.4-2.6.1.noarch

如您在下一个列表中看到的,syscrondir 中的文件包含标准的 cronjob 规则; 在每行中,我们必须指定一个用户(在本例中为 smolt)

# cat /etc/cron.d/smolt
# Runs the smolt checkin client
# Please note that calling with -c will cause smolt to pause a random amount of
# time between 0 and 3 days before actually sending, this is to prevent ddos on
# the server
20 1 1 * * smolt /usr/bin/smoltSendProfile -c > /dev/null 2>&1

/etc/crontab

在大多数情况下,用户不需要更改此文件。 安装后,系统 crontab 包含一个重要的规则,该规则启动 run-crons 脚本(此脚本执行 daily、hourly、weekly 目录中的所有脚本)。

# cat /etc/crontab
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
-*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1

cron.hourly cron.daily cron.weekly cron.monthly

当您想为您的软件包创建 cron 任务规则,并且不需要使用 crontab 规则来确定确切时间时,这是个好地方。 这些目录是安排以每日、每小时、每周或每月周期执行脚本的简单方法。 您只需将脚本(由 root 拥有,具有执行权限)推送到这些目录之一。 请参阅 daily cronjob 的列表,再次所有 crontab 文件都不由 cron 软件包拥有

#> ll /etc/cron.daily/
total 32
-rwxr-xr-x 1 root root  587 2009-10-24 05:20 logrotate
-rwxr--r-- 1 root root  948 2009-10-24 05:50 suse-clean_catman
-rwxr-xr-x 1 root root 1875 2003-09-01 13:10 suse.de-backup-rc.config
-rwxr-xr-x 1 root root 2059 2003-09-08 15:50 suse.de-backup-rpmdb
-rwxr-xr-x 1 root root  566 2004-07-23 12:38 suse.de-check-battery
-rwxr-xr-x 1 root root 1314 2005-07-27 15:28 suse.de-clean-tmp
-rwxr-xr-x 1 root root  371 2003-09-01 13:10 suse.de-cron-local
-rwxr--r-- 1 root root 1693 2009-10-24 05:50 suse-do_mandb

如上所述,这些目录的处理由 shell 脚本 /usr/lib/cron/run-crons 提供。 此脚本由 cron 任务(在 /etc/crontab 中定义)每 15 分钟触发一次。 如果您有构建服务帐户,您可以查看 此处run-crons 脚本。 基本上,它执行 /etc/sysconfig/cron(在 aaa_base 软件包中)以获取 sysconfig 设置,评估这些设置并在适当的时间段内执行提及的目录中的脚本。

cron 在文件系统中的各个部分

/etc/cron.deny 列在此文件中的用户无法使用 crontab -e 命令添加 cron 任务规则,但他们的 Cron 任务将被执行(如果已定义)
/etc/cron.allow 如果此文件存在并且您想使用 crontab -e 命令,则您的用户必须添加到此文件
/etc/crontab 主 crontab
/etc/init.d/cron cron init 脚本
/etc/sysconfig/cron init 脚本的 sysconfig,由 run-crons 脚本处理。 使用此配置,您可以更改处理放置在 /etc/cron.{hourly,daily,weekly,monhtly} 中的脚本的行为
/etc/omc/srvinfo.d/cron.xml 请参阅 omc 伞形项目 http://developer.novell.com/wiki/index.php/OMC
/usr/bin/crontab 用于编辑用户 crontab 的命令(设置了 setuid 位)
/usr/lib/cron/run-crons 此脚本每 15 分钟从主 crontab 执行一次,并处理放置在 /etc/cron.{hourly,daily,weekly,monhtly} 中的脚本
/usr/sbin/cron cron 守护进程二进制文件,由 init 脚本执行
/usr/sbin/rccron 只是一个链接到 /etc/init.d/cron
/var/spool/cron/lastrun 此目录可以包含 cron.hourly、cron.daily、cron.weekly、cron.monthly 文件,这些文件标记了 /etc/cron.{hourly,daily,weekly,monthly} 中脚本的最后执行时间
/var/spool/cron/tabs 用户 crontab -- 仅 root 具有读取和写入权限
/var/run/cron.pid 当前运行的 cron 守护进程的 pid

现有任务

cron.hourly

suse.de-snapper:如果TIMELINE_CREATE="yes"/etc/snapper/configs/ 中的配置文件中,则创建每小时快照

cron.daily

mdadm:每天运行 mdadm --monitor --oneshot 以确保未注意到的降级阵列。

packagekit-background.cron:(默认关闭) 使用 pkon 更新,或根据 pkon 中的设置检查更新/etc/sysconfig/packagekit-background

suse-clean_catman:根据 pkon 中的设置,每 7 天删除旧的预格式化 man 页面/etc/sysconfig/cron

suse-do_mandb:运行 mandb,根据 mandb 中的设置/etc/sysconfig/cron

suse.de-backup-rc.config:根据 mandb 中的设置,创建 sysconfig 文件的备份存档/etc/sysconfig/backup

suse.de-backup-rpmdb:根据 mandb 中的设置,创建 RPM 数据库的备份/etc/sysconfig/backup

suse.de-check-battery:检查 CMOS 电池。

suse.de-cron-local : ???

suse.de-snapper:运行 snapper 清理算法(编号、时间线、空前/空后),根据 /etc/sysconfig/snapper 中的设置/etc/sysconfig/snapper

cron.weekly

btrfs-balance:运行 btrfs balance,根据 btrfs balance 中的设置/etc/sysconfig/btrfsmaintenance

btrfs-trim:运行 fstrim,根据 fstrim 中的设置/etc/sysconfig/btrfsmaintenance

cron.monthly

btrfs-scrub:运行 btrfs scrub,根据 btrfs scrub 中的设置/etc/sysconfig/btrfsmaintenance

Cron 守护进程选项

debug cron

如果 cron 没有按您的意愿执行,请使用调试选项:停止 cron 守护进程,并使用带有附加的一个或多个调试标志的 -x 选项启动 cron 守护进程。 您还可以使用 -n 选项在前景中运行 cron 守护进程

# rccron stop
# cron -nx pars,load

可用调试标志:ext、sch、proc、pars、load、misc、test、bit

内部链接

外部链接