一、延时任务

在Linux中延时任务是临时的,可以指定某一个任务在将来的特定时间运行

1、at命令

基本操作格式:[root@loveyu ~]# at now+1min

at> date   #EOT代表Ctrl+D来保存这个延时动作

job 2 at 2017-07-29 12:12at -l|atq这两个命令都是用来查看当前的延时任务

atrm | at -d +任务号这个命令都是用来取消定时任务

at -c +任务号查看延时任务的内容

at -f file延时任务执行文件中的动作。注意文件不是脚本

at now+1min延时1分钟

at -m延时命令没有输出也发邮件给执行者,默认没有输出不发邮件。

at -M延时命令即使有输出也不发邮件给执行者

2、at执行命令权利设定

/etc/at.deny   #用户黑名单,此名单中的用户不能执行at命令

/etc/at.allow  # 用户白名单,此文件默认不存在,建立后所有用户均没有at命令执行权限,此名单中的用户才有at命令执行权限。

二、定时任务

定时任务是永久的,在系统中每分钟做任务扫描,他的任务程序是crond[root@loveyu ~]# ll /etc/|grep cron

-rw-r--r--.  1 root root   541 Jul 19  2011 anacrontab
drwxr-xr-x.  2 root root   4096 May  1 20:43 cron.d
drwxr-xr-x.  2 root root   4096 Apr  5 21:54 cron.daily    #每天都要执行一次的定时任务
-rw-r--r--.  1 root root   0 Jul 19  2011 cron.deny
drwxr-xr-x.  2 root root   4096 Apr  5 21:51 cron.hourly   #每小时都要执行一次的定时任务
drwxr-xr-x.  2 root root   4096 Apr  5 21:53 cron.monthly  #每月都要执行一次的定时任务
drwxr-xr-x.  2 root root   4096 Sep 27  2011 cron.weekly   #每周都要执行一次的定时任务
-rw-r--r--.  1 root root   457 Sep 27  2011 crontab
[root@loveyu cron.d]# cat /etc/crontab
SHELL=/bin/bash       #执行定时任务的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin  #全局路径
MAILTO=root           #邮件的接收者
HOME=/
#下面为定时任务前五个 "*"号的意思
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

1、发起方式一:使用crontab命令发起

原理是在/var/spool/cron/ 对应用户的名称的文件中添加你的定时任务。[root@loveyu ~]# ll /var/spool/cron/

total 16

-rw-r--r-- 1 root root 285 May  3 20:13 \

-rw------- 1 root root  22 Jul 29 13:06 feitian

-rw------- 1 root root  44 Jul 29 13:08 loveyu

-rw------- 1 root root 476 Jul 29 13:04 rootcrontab  -u指定这个定时任务属于哪个用户

crontab  -l列出当前用户的定时任务

crontab  -e编辑当前用户的定时任务

1》一般crontab定时任务语法*

*号,表示任意时间都,实际就是“每”时间的意思,如00 23 * * * cmd表示每月内周每日的23:00执行cmd任务。需要注意的

是:每个时间为上的*表示每,如果位上是*就是该位上时间的取值范围,小时上*等价于00-23

-

减号,表示分隔符,表示一个范围内,区间段,如17-19点表示每天的17,18,19的00分指向任务

逗号,表示分隔时间段的意思;30 17,18,19 * * * /bin/sh/scripts/feitian.sh,表示每天17、18/19点的半点执行

/scripts/feitian.sh脚本,可以和-结合使用

/m

n代表述职,即每隔n个时间单位;例如每10分钟执行一次任务可以写成*/10 * * * * cmd ,其中*/10*,*的范围是0-59

也可以写成0-59/10;

2》举例05 * * * *每小时的正点过5分钟

05 02 8 * * *每天2.05am

30 08 1 * *每月第一天8:30pm

00 07 25 12 *12月25日7:00am

30 16 * * 5每个星期五4:30pm

*/5 * * * *每5分钟执行一次

*/10 9-17 1,15 *在每月第一天和第15天9:00am到5:00pm之间每隔10分钟执行一次

0 0 0 0 jan 01月1日午夜和1月的每个星期日[root@loveyu ~]# crontab -u  loveyu  -e

crontab: installing new crontab
[root@loveyu ~]# crontab -u  loveyu  -l
*/1 * * * *  echo "feitian" >> /mnt/fenghui

#每分钟将feitian这个字符串添加到fenghui这个文件中

2、发起方式二:使用vim/etc/cron.d/filename

这种方式和上面crontab差不多,但是完全和crontab没有关系,就是在时间的后边多了一个用户,也就是这个定时任务的拥有者。* * * * * root touch /mnt/file  ##表示每分钟在/mnt目录下建立一个文件file

3、crontab命令的执行权利的设定

/etc/cron.deny   ##用户黑名单,此名单中的用户不能执行crontab命令(直接在文件中写用户名)

/etc/cron.allow   ##用户白名单,此名单默认不存在,建立后所有用户均没有at命令执行权限,此名单中的用户才有crontab命令执行权限.

三、系统中临时文件

系统中服务在正常运行时会产生临时文件,他会在在系统中/usr/lib/tmpfiles.d/目录下存放,系统的临时文件的配置配置是/usr/lib/tmpfiles.d/*.conf,自己创建的临时文件配置文件必须以.conf结尾。

临时文件配置的编写方式是:文件类型  文件名    文件权限 文件所有人 文件所有组 文件至少存在的时间

d      /mnt/westos     777       root    root       10s
##表示在/mnt目录下创建临时目录westos,并且十秒内不能被删除
systemd-tmpfiles --create  /usr/lib/tmpfiles.d/*  ##执行临时文件配置
systemd-tmpfiles --clean  /usr/lib/tmpfiles.d/*   ##清理临时文件