矮人村

标题: 定时执行任我行 [打印本页]

作者: my163    时间: 2018-3-8 22:58
标题: 定时执行任我行
3.4.4 定时执行程序 
3.4.4 定时执行程序
Unix系统提供了cron和at命令,使系统和用户可以定时运行一定的程序,而不需手工启动。
使用 cron用于周期性的执行一个命令,为了使用它,必须编辑crontab文件。
用户也可以使用 crontab命令来创建和维护自己的crontab文件。
$ crontab -l
12 0 * * * /home/user/bin/getfiles
cron按照每列规定的时间来执行相应的命令,第一列为分钟,规定每小时的第几分执行相应的程序,第二列为每天第几小时执行程序,第三列为每月的第几天,第四列为第几周,第五列为每周的第几天,最后为要执行的命令。
使用 “ crontab -e ” 命令,用户可以使用编辑器按照这个格式编辑自己的crontab文件,或者使用 “ crontab -l ” 列出现有crontab文件的内容。当然只有root用户才能查看其他用户的crontab文件:
所有用户的 crontab设置文件都放在/var/cron/tabs目录下,文件名与每个用户的用户名相同。cron中的命令执行结果将被系统使用mail寄给每个用户。在/var/cron目录下还有crontab执行的记录文件,系统管理员可以按照这个文件来检查系统安全性,检查是否有影响系统安全的程序被执行。
除了使用 crontab编辑各个用户定时执行程序之外,系统文件/etc/crontab中定义了系统级的crontab文件,这个文件还包括命令应该以那个用户的身份来执行的设置。系统缺省的/etc/crontab文件为:
# /etc/crontab - root's crontab for FreeBSD
#
# $Id: crontab,v 1.13 1996/01/06 22:21:37 ache Exp $
# From: Id: crontab,v 1.6 1993/05/31 02:03:57 cgd Exp
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour mday month wday who command
#
*/5 * * * * root /usr/libexec/atrun
#
# rotate log files every hour, if necessary
0 * * * * root /usr/sbin/newsyslog
#
# do daily/weekly/monthly maintenance
0 2 * * * root /etc/daily 2>&1 | sendmail root
30 3 * * 6 root /etc/weekly 2>&1 | sendmail root
30 5 1 * * root /etc/monthly 2>&1 | sendmail root
#
# time zone change adjustment for wall cmos clock,
# does nothing, if you have UTC cmos clock.
# See adjkerntz(8) for details.
1,31 0-4 * * * root /sbin/adjkerntz -a
系统 crontab文件的第六列为执行这一行指令的用户,而文件的最开始,还设置了一些环境变量,用于设置程序的执行环境。
从系统的 crontab来看,系统还提供了每天、每周、每月执行的程序,如果不要求十分精确,可以利用这些脚本来完成一些工作。
与 cron不同,at命令用于在一定的时间后或在一定的时刻执行设置好的命令。at命令使用一个时间参数表示何时执行命令,然后就从标准输入中读入要执行的命令,此时就如同在shell下操作一样输入要执行的命令,最后使用^D退出输入命令的模式。用户不必担心真正执行命令时是否能够找到正确的程序,at会将当前shell的设置,包括环境变量,保留起来,以便在执行命令时创造一个与启动at时完全相同的执行环境。
$ at 1:00am +2days
fetch ^D
上面命令将在两天后的凌晨 1:00时启动进程下载文件,当然at命令并不是十分精确,其执行时间只是表示大概时间,可能与标准时间存在一两分钟的差异。at也支持各种复杂的时间表示方法,可以使用hhmm,hh:mm,或者加上am或pm结尾的12小时制方式。还可以使用年月日,规定程序运行的日期:




欢迎光临 矮人村 (http://airencun.com/) Powered by Discuz! X3.1