linux中除了即时的命令任务以外,还可以设置周期性的计划任务,centos系统默认安装了at,vixie-cron 软件包,通过atd和crond这两个系统服务实现一次或周期性的计划任务功能,并分别通过at,crontab命令进行计划任务设置。
at一次性任务设置
at任务只会在指定的时间运行一次,任务执行的前提是,atd必须运行,计划执行任务的时间必须在当前时间之后,否则无法正确运行
at命令后依次指定计划执行任务的时间,日期作为参数。(若只指定时间则表示当天的该时间,若只指定日期则表示该日期的当前时间),然后回车会进入只有“at>”提示符的任务编辑界面,每行设置一条执行命令,可以一次设置多条语句,最后按Ctrl+D 提交任务即可。设置的命令会在固定的时间依次执行。
1.设置任务:at [任务时间]
例子:
[dyq@spider ~]$ at 15:40 2015-5-14
at> mkdir /home/dyq/33ddab\
at> mkdir /home/dyq/123244d<EOT> //添加完任务以后CTRL+D 提交任务
job 3 at 2015-05-14 15:40
到点后验证
[dyq@spider ~]$ ls
123244d 33ddabmkdir
2.查询未执行的任务(执行完了的任务就没有了):atq
[dyq@spider ~]$ atq
1 2015-05-12 14:28 a dyq
2 2015-05-14 15:30 a dyq
3.删除任务:atrm
atrm 2 //atrm 后面跟任务号
周期性任务设置:crontab(前提条件:系统服务crond 必须已经运行)
1.crontab的配置文件和目录
crond通过多个目录和文件设置计划任务,不同类型的任务由不同的配置文件来设置
1). /etc/crontab 系统任务配置文件,这里面保存了维护linux所需的任务,一般不建议手动更改。
2). /var/spool/cron 用户cron任务的配置文件存放目录
由用户自行设置(使用crontab)的cron计划任务将被保存到目录 /var/spool/cron 中,文件名与用户名相同。
crond守护进程会自动检查/etc/crontab 文件,/etc/cron.d/ 目录以及 /var/spool/cron/ 目录中的改变,如果发生更改,就会自动载入内存,不用重启crond守护进程。
2.管理用户计划任务:crontab
格式:
参数:-e:编辑计划任务列表
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户,一般只有root用户有权限使用此选项(用于编辑,删除其他用户的计划任务)
-l:列表显示计划任务
-r:删除计划任务列表
1). 编辑用户的计划任务列表:crontab -e
每一行任务配置都包含六个数据字段,分别表示不同的含义
各字段的作用不同,其取值的范围也不一样,crontab任务配置记录中所设置的命令操作将在所有时间都满足的条件下执行。
取值范围说明
* 时表示取值范围中的任意时间
除了*以外,还可以使用减号“-”逗号“,”斜杠“/”与数字组成比较复杂的时间表达式
减号“-”:可以表示一个连续的时间范围,如“1-4”
逗号“,”:可以表示一个间隔的不连续范围,如“3,4,5”
斜杠“/”:可以用来指定间隔频率,如在日期字段中的 */3 表示每个三天
实例:
1). 用户root计划以下任务
#crontab -e //开始编辑任务
50 7 * * * /sbin/service sshd start //每天的7:50 启动sshd服务
1 1 */5 * * /bin/rm -rf /var/ftp/pub/* //每隔五天删除一次 /var/ftp/pub/下所有的文件
30 7 * * 6 /sbin/service httpd restart //每个星期六的7:30 重新启动一次httpd服务
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd //每个星期的1,3,5 用tar备份一次/etc/httpd 下的内容。
2). crontab -e -u dyq //让普通用户dyq执行以下计划任务,也就是把这个计划任务制定给dyq执行
55 23 * * 7 /bin/cp /etc/passwd /home/jerry/pwd.txt //每个星期的星期日23:55,把/etc/passwd的内容cp到.../pwd.txt文件中。
注意:
1.计划任务的制定对象(自己,或其他用户)有没有这条命令的执行权限,权限这里要注意。
2.计划任务的命令最好写该命令的绝对路径,以避免缺少执行路径而没办法执行。例如(/bin/cp)
3.计划每天执行的任务的时候,在小时和分钟的地方也要指定时间,要不然就会变成每分钟都要执行一次了。不要是指0时0分,容易出错。
查看用户的计划任务列表
命令:crontab -l //能看到用户自己计划了哪些任务
ls -l /var/spool/cron/dyq //再次说明,计划任务文件的名称与用户自己的名称相同。
删除用户的计划任务列表
crontab -r //删除计划任务,命令默认是删除用户本身的计划任务,如果需要删除别人的计划任务,直接在/var/spool/cron目录下直接修改吧。
crontab -r //删除全部计划局任务
如果要删除某条任务时,直接vim里面修改内容。
由于计划任务只能完成单一的命令任务,如果遇到复杂的任务时,一般先把命令编写成一个shell脚本,然后在创建计划任务,调用shell脚本来执行计划任务。
本文出自 “从0开始吧” 博客,请务必保留此出处http://0kaishi.blog.51cto.com/9457500/1679069
原文地址:http://0kaishi.blog.51cto.com/9457500/1679069