系统定时任务
博客整理于:
http://www.2cto.com/os/201409/336183.html
http://blog.csdn.net/lf_2016/article/details/57390570
目的:
让我们的计算机在指定的时间完成指定的任务,可以是系统的一个命令,也可以是我们之前写好的一个脚本。比如说,我们的服务器晚上的时候(压力比较小),定时拷贝数据库,日志。可以让我们可以从重复劳动中解脱。
windows当中也有这样的功能:在附件中的 任务计划程序
- at 一次性定时任务
- crontab循环定时任务(可以每天每周每月执行)
- 系统的crontab设置
- anacron设置
1.at学习
1.1确定at安装(查看atd服务是否安装)
(一般是默认安装的)
- chkconfig –list |grep atd #at 服务是否安装
- service atd restart #at服务启动
为什么我们的服务后面都要加一个d?
damemon 守护进程的意思
1.2限制用户的使用权限
前提:很多主机被所谓的攻击破解后,最常发现的就是他们的系统当中多了很多的黑客程序,这些程序非常可能运用一些计划任务来运行或搜集你的系统运行信息,并定时的发送给黑客。所以,除非是你认可的帐号,否则先不要让他们使用 at 命令
at命令使用的控制文件来限制用户的使用控制
控制文件目录:/etc/at.allow和/etc/at.deny
控制文件使用规则:
1:先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
2:如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者就可以使用 at 命令。
3:如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。
4:在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思。
5:如果不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。
# vi /etc/at.allow
at [选项] 时间
选项: -m: 当at 工作完成之后,无论是否命令有输出,都用email执行通知执行at命令的用户
-c工作号:显示该at工作的实际内容
注意事项
1、如果at的指令输出的路径有误 则会把结果以邮件的形式发送给用户
2、当一个任务创建了会被分配到一个任务号,而且会在/var/spool/at里面排队。不建议使用vi编辑器去修改,容易出错。
1.3at命令
cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
service atd start //启动服务
service atd stop //关闭服务
service atd restart //重启服务
service atd reload //重新载入配置
service atd status //查看服务状态
实例1:三天后的下午 5 点锺执行 /bin/ls
# at 5pm + 3 days
at> /bin/ls
at> <EOT>
job 7 at 2013-01-08 17:00
实例2:明天17点钟,输出时间到指定文件内
# at 17:20 tomorrow
at> date > /root/doiido.log
at> <EOT>
job 8 at 2013-01-06 17:20
实例3:计划任务设定后,在没有执行之前用atq命令来查看系统没有执行工作任务
# atq
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root
实例4:删除已经设置的任务
# atq
8 2013-01-06 17:20 a root
7 2013-01-08 17:00 a root
# atrm 7
# atq
8 2013-01-06 17:20 a root
实例5:显示已经设置的任务内容
# at -c 8
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
echo "hello"
date > doiido.log
扩展指令batch
batch为,at命令的特殊版本,在执行的任务会占用大量资源的时候用,只在cpu需求低于cpu能力80%的时候使用
# batch
at> echo "hi" > /dev/tty2
batch创建的任务也是通过atq查看,atrm删除
2.crond学习
2.1什么是crond??
crond是Linux用来定期执行命令或指定程序任务的一种服务。安装完操作系统后,默认会启动crond任务调度服务。crond服务会定期检查系统中是否有要执行的任务。如果有要执行的任务便会自动执行该任务。crond定时任务服务就像我们早上使用的闹钟一样
查看crond服务状态:
命令:service crond status
启动crond服务:
命令:service crond start
2.2 什么是crontab???
crontab是一个可以在crond服务上添加或编辑定时任务的命令。
设置定时任务命令:
crontab -u 用户名 //设定某个用户的crond服务,一般root用户需要这个参数
crontab -l //列出某个用户crond服务的详细内容
crontab -r //删除某个用户的crond服务
crontab -e //编辑某个用户的crond服务
例:root用户要查看自己的详细crond服务内容
命令: crontab -u root -l
2.3 crontab file的格式
crond服务是运行的程序,crontab是用户用来设置定时任务的命令。
crontab文件中的行是由6个字段组成,不同的字段间用空格或tab分隔。前5个字段指定命令要运行的时间,第六个字段指定要实行的字符串。
描述 如下
段 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
含义 | 分钟 | 小时 | 日期 | 月份 | 星期几 | 要执行的任务 |
取值 | (0-59) | (0-23) | (1-31) | (1-12) | (0-6)0表示星期日 |
例:
/#2月1日星期3早上8点
0 8 1 2 3 date
2.4、crontab语法格式中的特殊符号含义
这里写图片描述
例:每天早上8点在显示屏上打印”hello …”这句话
:0 8 * * * echo “hello …”
2.5、crontab的使用者权限记录在下面两个文件内
/etc/cron.deny //文件内的用户不允许使用
/etc/cron.allow //文件内的用户允许使用
/var/spool/cron/ //是所有用户的crontab文件
总结:
1、常见的定时任务分为两类:
1.1、linux系统自身定期执行的任务工作
例:轮询系统日志、备份系统数据、清理系统缓存。
1.2、用户执行的任务工作
例、备份数据库数据,更新时间等。
2、在编写crontab文件的时候最好做到以下几点:
2.1、加注释
2.2、定时任务命令写到脚本里面
2.3、定时任务命令或脚本尾加 >/dev/null 2>&1
2.4、使用绝对路径