德克云技术联盟

标题: Linux自动化任务 [打印本页]

作者: 李臻宇    时间: 2014-7-16 17:14
标题: Linux自动化任务


自动化任务
    在Linux中,任务可以被配置在指定的时间段,指定的日期,或系统平均载量低于指定的数量时自动运行。
    系统管理员可以使用自动化任务来执行定期备份,监控系统,运行定制脚本等等。
    Red Hat Linux随带四个自动化任务的工具:CRON,ANACRON,at,和batch。

CRON
一、CRON
1、cron是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。
2、cron假定系统持续运行.如果当某任务被调度时系统不再运行,该任务就不被执行.要根据时间段而非常确切时间来配置任务.
二、cron的安装
[root@simple ~]# rpm -q vixie-cron
vixie-cron-4.1-44.EL4
三、配置cron任务
1、主要配置文件/etc/crontab
2、/etc/crontab文件中的每一行都代表一项任务
格式是:minute hour day month dayofweek command
minute:分钟,从0到59之间的任何整数
hour:小时,从0到23之间的任何整数
day:日期,从1到31之间的任何整数
month:月份,从1到12之间的任何整数
dayofweek:星期,从0到7之间的任何整数,0和7都代表星期日。
command:要执行的命令(可以是自己编写的脚本)
3、在/etc/crontab文件中,它使用run-parts脚本来执行/etc/cron.hourly、/etc/cron.daily、/etc/weekly、/etc/cron.monthly目录中的脚

本,这些校本被相应的每小时,每日,每周或者每月来执行。这些目录中的文件应该是shell脚本。
4、如果某cron任务需要根据调度来执行,而不是每小时,每日,每周,或者每月执行,它可以被添加到/etc/cron.d目录中.该目录中的所有文件使

用和/etc/crontab中一样的语法.
两个实例
#Record the task list  of the system every Monday
#at 9:30AM in the file /root/task.tmp
30 9 * * 1 ps -aux > /root/task.list
#run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh
5、根用户以外的用户可以使用crontab工具来配置cron任务。所有用户定义的crontab都被保存在/var/spool/cron目录中,并使用创建他们的

用户身份来执行。要以某用户身份创建一个crontab项目,登陆为该用户,然后键入crontab -e命令,使用由VISUAL或EDITOR环境变量制定的编

辑器来编辑该用户的crontab。该文件使用格式和/etc/crontab相同。当对crontab所作的改变被保存后,该crontab文件就会根据用户名被保存

,写入文件/var/spool/cron/username中
6、cron守护进程每分钟都检查/etc/crontab文件、/etc/cron.d/目录、以及/var/spool/cron目录中的改变。如果发现了改变,他们就会被载

入内存。这样,当某个crontab文件改变后就不必重新启动守护进程了。
7、控制对cron的使用。
1)、/etc/cron.allow和/etc/cron.deny文件被用来限制对cron的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格

。如果使用控制文件被修改,cron守护进程不必被重新启动。使用控制文件是在每次用户添加或者删除一项cron任务时候读取。
2)、无论是用控制文件中的规定如何,跟用户都总是可以使用cron
3)、如果cron.allow文件存在,只有其中列出的用户才能被允许使用cron,并且cron.deny文件会被忽略。
4)、如果cron.allow文件不存在,所有在cron.deny中列出的用户都被禁止使用cron.

anacron
一、anacron是和cron相似的任务调度器,只不过它并不要求系统持续运行。它可以用来运行通常由cron运行的每日、每周和每月的作业。
二、anacron安装
[root@simple ~]# rpm -q anacron
anacron-2.3-32
三、配置anacron任务被列在配置文件/etc/anacrontab中。文件中的每一行都代表一项任务.
格式是:period delay job-identifier command
1、period-命令执行的频率(天数)
2、delay-延迟时间(分钟)
3、job-identifier-任务的描述,用在anacron的消息中,并作为作业时间戳文件的名称,只能包括非空白的字符(斜线除外)
4、command-要执行的命令
示例配置文件:
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

1       65      cron.daily              run-parts /etc/cron.daily
7       70      cron.weekly             run-parts /etc/cron.weekly
30      75      cron.monthly            run-parts /etc/cron.monthly

at和batch
一、at和batch
cron和anacron被用来调度重复的任务,at命令被用来指定时间内调度一次性的任务。
batch命令用来在系统平均载量降到0.8以下时值性一次性的任务。
二、安装at和batch
要使用at和batch命令必须安装at RPM
[root@simple ~]# rpm -q at
at-3.1.8-80_EL4
三、配置at作业
在某一指定的时间调度一项一次性作业,键入at time命令。
格式:
这里的time是执行命令的时间
*time参数可以是以下格式中的任何一种:
HH:MM格式--例如:04:00代表4:00AM。如果时间已过,就在第二天这一时间执行。
midnight--代表12:00AM
noon--代表12:00PM
teatime--代表代表4:00PM
英文月名 日期 --例如:January 15 2002 代表2002年一月15日。年份可有可无。
MMDDYY、MM/DD/YY、MM.DD.YY格式--如:011502代表2002年1月15日
now+时间---时间以minutes、hours、days、weeks为单位。例如。now+5days代表命令应该在5天之后的此刻执行。
配置:
键入了at命令和它的时间参数后,at>提示就会出现。键入要执行的命令,按回车,然后键入Ctrl+D。你可以指定多条命令,方法是键入每一条

命令后按回车,键入所有的命令后按回车,在键入Ctrl+d。或者,也可以在提示后输入shell脚本,所用的shell就是用户的shell环境变两种设

置的值,用户的登陆shell,或者/bin/sh
3、如果这组命令或脚本试图在标准输入中显示信息,该输出会用电子邮件方式被邮寄给用户。
4、可以使用atq命令来查看等待运行的作业。
四:配置batch作业
在系统平均载量降到0.8以下时值邢某项一次性的任务。
键入batch命令后,at>提示就会出现,键入要执行的命令,按回车,然后键入Ctrl+D。可以指定多条命令。
五、控制at和batch的使用
/etc/at.allow和/etc/at.deny方法和上面说过的cron.allow/deny一样。


刚才看了看别人的文档突然发现遗忘了一些东西
以下内容转自:http://hi.baidu.com/kaizen/blog/ ... 0384cad1c86a1f.html
小田的日志:
例子 :
#每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
注意 :
当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

例子2 :
#每天早上6点10分
10 6 * * * date
#每两个小时
0 */2 * * * date
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
#1月份日早上4点
0 4 1 jan * date
范例
$crontab -l 列出用户目前的crontab.







欢迎光临 德克云技术联盟 (http://www.decoclouds.com/)