Linux系统定时任务

这边讲两种定时任务:
一、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/crontab
文件中会内置好shell路径和环境变量,书写方式与crontab -e相同,需要添加下任务执行的用户名
*/1 * * * * root /bin/echo "helllllllllllll0" >> /root/test.txt

猜你喜欢

转载自www.cnblogs.com/gotwindy0/p/9099154.html