一、at命令
1.at服务
cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
service atd start //启动服务
service atd stop //关闭服务
service atd restart //重启服务
service atd reload //重新载入配置
service atd status //查看服务状态
2.at在配置文件:
at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。
3.参数详解
at [-V] [-q x] [-f file] [-mldbv] time
at -c job ...
atq [-V] [-q x]
atrm [-V] job ...
-V : 印出版本编号
-q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个
-m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者
-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入 网络应用
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)
-v : 列出所有已经完成但尚未删除的指定
1)at命令添加延时任务
时间
延迟的时间
ctrl+d发起任务
示例:
a)直接加时间
[root@localhost dir]# at 22:24
at> date
at> <EOT> #ctrl+d发起任务
job 9 at Thu Apr 6 22:24:00 2017
[root@localhost dir]# mail #at命令也可以向发起任务的用户发送邮件,当命令是有输出的时候
5 root Thu Apr 6 22:24 14/524 "Output from your job "
b)加延迟的时间
[root@localhost dir]# at now+1min
at> date
at> <EOT>
job 10 at Thu Apr 6 22:26:00 2017
You have mail in /var/spool/mail/root
[root@localhost dir]# mail
6 root Thu Apr 6 22:26 15/534 "Output from your job "
2)at命令显示当前还未执行的任务
at -l :列出到当前还未执行的任务
示例:
[root@localhost dir]# at -l
11 Thu Apr 6 22:30:00 2017 a root
3)删除延时任务
atrm 任务号 #删除一个任务
示例:
[root@localhost dir]# at -l
13 Thu Apr 6 22:31:00 2017 a root
[root@localhost dir]# atrm 13
[root@localhost dir]# at -l
[root@localhost dir]#
4)at命令的黑名单
/etc/at.deny
[root@localhost dir]# vim /etc/at.deny
[root@localhost dir]# cat /etc/at.deny
student
[root@localhost dir]# su - student
Last login: Thu Apr 6 09:44:25 EDT 2017 on pts/0
[student@localhost ~]$ at now+1min
You do not have permission to use at.
5)at命令的白名单
/etc/at/allow默认是没有这个文件,只要他出现,黑名单就失效了,所有人都是黑名单
[root@localhost dir]# vim /etc/at.allow
[root@localhost dir]# cat /etc/at.allow
student
[root@localhost dir]# su - student
Last login: Thu Apr 6 10:52:11 EDT 2017 on pts/0
[student@localhost ~]$ at now+1min
at> date
at> <EOT>
job 6 at Thu Apr 6 10:56:00 2017
at命令示例:
时 间 例子 说明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任务在5分钟后运行
Hour at now + 1 hour 任务在1小时后运行
Days at now + 3 days 任务在3天后运行
Weeks at now + 2 weeks 任务在两周后运行
Fixed at midnight 任务在午夜运行
Fixed at 10:30pm 任务在晚上10点30分
Fixed at 23:59 12/31/2018 任务在2018年12月31号23点59分
二、crond服务及crontab命令
1.crond服务
crond用来做周期性运行的例行任务,执行这项服务的命令就是crontab命令了。
2.crond与crontab的关系
crond是一个守护进程,它每分钟wake up一次,按照crontab里定义的形式来执行任务
crond是工具,是linux服务项
我们可以查看crond服务状态:
#/sbin/service crond status
也可以启动、停止、重启crond服务:
#/sbin/service crond start
#/sbin/service crond stop
#/sbin/service crond restart
cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务,
你可以编辑/etc/crontab来修改你要的服务
crontab是在unix/linux系统上定时执行某个任务的程序
打个比方,就像只有我买了adsl这项服务,我才可以上网,crond就是服务,crontab就是上网操作
3.linux下的任务调度又分为系统任务调度和用户任务调度两个大类。
- 系统任务调度
系统周期性所要执行的工作,比如写缓存数据到硬盘,日志的定期清理一类的,在/etc目录下有一个
crontab的文件,这个就是系统任务调度的配置文件了。来看一下这个配置文件的说明
[root@localhost Desktop]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
For details see man 4 crontabs
Example of job definition:
.---------------- minute (0 - 59) -》表示分钟,可以是从0到59之间的任何整数。
| .------------- hour (0 - 23) -》表示小时,可以是从0到23之间的任何整数。
| | .---------- day of month (1 - 31) -》表示日期,可以是从1到31之间的任何整数。
| | | .------- month (1 - 12) OR jan,feb,mar,apr ... -》表示月份,可以是
从1到12之间的任何整数。
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR
sun,mon,tue,wed,thu,fri,sat -》表示星期几,从0到7的任何整数,
0或7代表星期日。
| | | | |* * * * * user-name command to be executedi -》要执行的命令,
可以是系统命令,也可以是自己编写的脚本文件。
我们看到,前三行说明了要运行的shell的一些参数,第一行SHELL=/bin/bash代表了要运行哪个shell,linux下默认的就是最常用的bash;
第二行代表要运行的shell脚本或系统命令等地路径;第三行的mailto则代表要将任务的执行信息发送给谁,如果是空则不发送信息,本例中
则是发送给root用户。最后一行的描述请看上图中的描述,或参考下图
注意,在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,
例如*/10,如果用在minute字段,表示每十分钟执行一次
- 用户任务调度
该任务调度是指站在了人的角度去执行的事务,如定期的用户数据备份、网络爬虫的定期执行、工作任务的定期邮件提醒等等,用户
都可以通过crontab任务来执行计划任务。所有用户定义的crontab文件都保存在目录/var/spool/cron中,文件名与用户名一致。
3.crontab用法
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
4.怎样非交互式的建立定时任务:
在/etc/cron.d下写文件,文件名可以任意,但是文件内容有要求
时间 用户 任务
* * * * * root touch /dir/file{1..2}
5.crontab黑白名单
黑名单:/etc/cron.deny
白名单:/etc/cron.allow
crontab的黑白名单是用来规定谁不能执行crontab命令,与/etc/cron.d/下的文件和/etc/crontab没有关系,即使student在黑名单中,若是/etc/cron.d下的文件和/etc/crontab有student的任务,依然可以执行
[root@localhost ~]# su - student
Last login: Thu Apr 6 10:55:26 EDT 2017 on pts/0
[student@localhost ~]$ crontab -e
You (student) are not allowed to use this program (crontab)
See crontab(1) for more information
[root@localhost ~]# vim /etc/cron.allow
[root@localhost ~]# su - student
Last login: Thu Apr 6 12:09:46 EDT 2017 on pts/0
[student@localhost ~]$ crontab -e
crontab: no changes made to crontab
crontab 注意事项
• 属于系统的任务通常保存在 /etc/crontab 文件中而不是使用 crontab -e 编辑保存在个人文件中。更好的做法是用文本编辑器创建 crontab 文件并保存到 /etc/cron.d 中 ( 避免更新系统软件包 cronie 时出现问题 ) 。
/etc/cron.d/crontab 文件在日期说明后另加一个字段 , 表示将运行作业的用户
• 对于需要每天、每周或每月运行一次的脚本 , 可以直接将其设置为可执行文件 , 并保存在 /etc/cron.{daily,weekly,monthly} 中相应目录下。这些任务由/etc/anacrontab 配置的系统 anacron 服务运行 anacron是 cron 的集成组件 , 用于更好地管理作业 , 并确保在作业因计算机关闭而未运行的情况下 , 在系统引导后运行作业
定时任务管理临时文件:
/usr/lib/tmpfiles.d/:标实服务的临时文件存放位置
linux如何保证系统的清洁,并且还要保证正在执行的临时文件不能被清理掉?
设置文件存在的时间长度,超过时间长度就可删除。
在/usr/lib/tmpfiles.d/建立一个文件 里面写
d /mnt/westos 1777 root root 5s
d表示目录
实验:
systemd-tmpfiles --create /usr/lib/tmpfiles.d/*
在/mnt/westos创建一个文件等一会儿再创建一个,执行
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/* ##会删除先创建的文件file