一、延时任务
在Linux中延时任务是临时的,可以指定某一个任务在将来的特定时间运行
1、at命令
基本操作格式:
[root@loveyu ~]# at now+1min at> date<EOT> #EOT代表Ctrl+D来保存这个延时动作 job 2 at 2017-07-29 12:12
at -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 root
crontab -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 0 | 1月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/* ##清理临时文件