Linux系统定时任务

≯℡__Kan透↙ 提交于 2020-02-15 10:13:16
这边讲两种定时任务:
一、at一次性定时任务
很容易理解,就是只会执行一次的定时任务,适用于非工作时候时需要操作,可以定一个时间来执行。
1、检查at是否开机启动
chkconfig --list | grep atd
systemctl list-unit-files | grep atd (centos7)
2、at的访问控制
如果系统中有/etc/at.allow文件,那么只有这里面的用户可以使用at,如果没有allow,有at.deny文件,则deny中的用户无法使用at命令,对root不起作用。如果文件都不存在,只有root可以使用at命令。
3、使用方法
at [选项] 时间
选项:-m 当at完成后,无论是否命令有输出,都用mail通知用户
   -c 工作编号:显示对应工作编号的实际执行内容
时间格式如下:
   - HH:MM   例如 13:20
   - HH:MM   YYYY-MM-DD   例如 13:20  2018-08-08
     - HH:MM[am|pm] [month] [data]   例如 13:20 July 25
     - HH:MM[am|pm] +[minutes|hours|days|weeks] 例如 now + 5 minutes
 
 举例1:
at now + 2minutes #在两分钟后执行
vim /root/hello.sh <<#!/bin/bash   echo "hellooooooooooooo" >> /root/hello.log
chmod +x /root/hello.sh
#at now + 2 minutes
>/root/hello.sh
#ctrl+d退出
 
 举例2:
指定时间重启电脑 
at 02:00 2018-08-08
>/bin/sync #将内存数据保存到硬盘上
>/usr/sbin/shutdown -r now
重启操作仍是举例,实际使用中因不确实因素,不建议使用此方法。另at操作时输入错误删除的话需要按住ctrl再操作。
 
二、crontab循环定时任务

这是我们最常用的定时任务。

1、检查crontab是否开机启动
chkconfig --list | grep crond
systemctl list-unit-files | grep crond (centos7)
在这里说下,服务进程后面的d的意思是守护进程。
2、访问控制
如果系统中有/etc/cron.allow文件,那么只有里面的用户可以使用crontab命令,如果没有allow,有cron.deny文件,那么deny里面用户不能使用cron命令,对root不起作用。如果都不存在只有root用户可以使用。
3、命令使用
crontab [选项]
选项:
-e 编辑crontab定时任务
-l 查询任务
-r 删除当前用户所有的任务

# 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
 
# crontab -e
进入crontab编辑界面,会打开vim编辑你的工作
***** 执行的任务
第一个*号 一小时当中的第几分钟 范围 0-59
第二个*号 一天当时中的第几小时 范围0-23
第三个*号 一个月当中的第几天 范围 1-31
第四个*号 一年当中的第几月 范围 1-12
第五个*号 一周当中的星期几 范围 0-7(0,7都指星期天)
特殊符号
* 代表任何时间,比如第一个*不填数字的话 代表每分钟都执行,第五个*不填数字的话代表周几都执行
, 代表不连续的时间 比如‘“0 8,12,16 * * * 命令” 代表每天的8点 12点 16点的0点都执行一次
- 代表连续的时间,比如‘1 * * * 1-5 命令’ 代表周一到周五每分钟都执行
*/n 代表每隔多久执行一次 “*/10 */10 * * * 命令”代表每天隔第10小时中再隔10分钟执行一次
45 22 * * * 每天22点45执行一次
0 17 * * 1 每周一的17点整执行
0 5 1,15 * * 每月1号15号的早上5点执行一次
40 4 * * 1-5 每周一到周五 4点40执行一次
*/10 4 * * * 每天4点内隔10分钟执行一次
0 0 1,15 * 1 每月1,15号或者是周一也执行 0点执行一次
2017 9月 10月 每天的5点5分30秒
5 5 * 9,10 * 但不支持秒和年

举例 10 * * * * /root/hello.sh
实际执行是第个小时的10分执行,如1:10 2:10
如果想每10分钟执行一次可以改成
*/10 * * * * /root/hello.sh
注意事项
六个选项不能为空,必须填写,用*可任何时间
最小是分钟,最大是月
在定义时间时 日期和星期最好不要同时出来,一起写的话都会生效
在定时任务中建议都要写绝对路径。

 

 系统定时任务文件

-第一种是把需要定时执行的脚本复制到 /etc/cron.{daily,weekly,monthlyhourly}目录中的任意一个

 介绍一下anacron

anacron的主要功能是防止电脑未正常运行后未执行相关脚本,在开机会自动再执行。

 

 

我们用cron.daily工作来说明执行过程
首先读取/var/spool/änacron/cron.daiIy中的上一次 anacron执行的时间
·和当前时间比较,如果两个时间的差值超过1天,就执行 cron.daily工作
·执行这个工作只能在03:00·22:00之间
·执行工作时强制延迟时间为5分钟再随机延迟0.45分钟时间使用 ni( e命令指定默认优先级,使用 run-parts脚本执行/ et(/( ron· dai《 y目录中的所有可执行文件

anarcon会使用一天,七天,一个月作为检测周期,在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly,hourly}文件,用于记录上次执行cron的时间,和当前时间做比较,如果两个时间的差值超过了指定时间差值,证明有cron任务没有被执行。

 

 

-第二种是修改/etc/crontab配置文件

 

/etc/crontab
文件中会内置好shell路径和环境变量,书写方式与crontab -e相同,需要添加下任务执行的用户名
*/1 * * * * root /bin/echo "helllllllllllll0" >> /root/test.txt

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!