crontab实现秒级计划任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了crontab实现秒级计划任务相关的知识,希望对你有一定的参考价值。

参考技术A 打开crontab的配置文件:
[root@localhost ~]# cat /etc/crontab

# Example of job definition:
# .---------------- 分钟(0 - 59)
# | .------------- 小时 (0 - 23)
# | | .---------- 一月中的哪一天 (1 - 31)
# | | | .------- 月份 (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- 星期 (0 - 6) (Sunday=0 or 7) OR sun,mon...
# | | | | |
# * * * * * 用户 命令(或者脚本)
可以看到,他的5颗星分别代表 分钟、小时、天、星期、月份
那么可以实现的最小时间单位是分钟,想要实现秒级的计划任就需要另外做些处理:
我们要看到秒级的执行情况,需要借用一个date命令,这一样可以很好的看到结果。
每分钟将date输出的内容导入到/mnt/file的计划任务是:
[root@xen mnt]# crontab -l

[root@xen mnt]# cat /mnt/file
Wed Nov 29 07:46:01 EST 2017
Wed Nov 29 07:46:11 EST 2017
Wed Nov 29 07:46:21 EST 2017
用sleep10 表示休眠10s,
这样写就实现了每10秒执行一次,用了5个计划任务。如果要实现每5秒,甚至是每1秒执行一次,就要写59行计划任务了,显然太繁琐,可以用一个脚本的方式实现:

[root@xen mnt]# vim test.sh
#!/bin/bash
step=1 #间隔的秒数,不能大于60
for ((i=0;i<60;i=(i+step)));do
$(date>>/mnt/file)
sleep $step
done
exit 0
[root@xen mnt]# chmod +x test.sh
[root@xen mnt]# crontab -e

[root@xen mnt]# cat file
Wed Nov 29 08:06:02 EST 2017
Wed Nov 29 08:06:03 EST 2017
Wed Nov 29 08:06:04 EST 2017
Wed Nov 29 08:06:05 EST 2017
可以看到结果是每一秒都将date的结果导入到了指定的文件,这样就实现了每秒执行一次了。

计划任务

技术图片

“at 时间” 实现一次性计划任务
“at -l"    查看未执行的一次性计划任务
”atrm 计划任务的序号“    删除一次性计划任务

技术图片

 

 技术图片

周期性计划任务

”crontab -e"    创建、编辑周期性计划任务;
“crontab -l”    查看当前设置的周期性计划任务;
“crontab -r”    删除周期性的计划任务;
“crontab -u"    以管理员身份,编辑他人的计划任务;

周期性计划任务的口诀:“分、时、日、月、星期  命令” 。
如果某些字段没有设置,则使用星号* 占位;命令必须以绝对路径的方式实现;

用逗号来分别表示多个时间段;
用减号来表示一段连续的时间周期;
用除号表示执行任务的时间间隔;

分字段必须有值,不可以使用空或者星号;
日字段和星期字段不可以同时使用;

技术图片

查看at服务状态
[root@xuegod140 ~]# systemctl status atd #查看服务状态
[root@xuegod140 ~]# systemctl enable atd #开机启动atd服务
[root@xuegod140 ~]# systemctl disable atd #开机不启动atd服务
[root@xuegod140 ~]# systemctl start atd #开启atd服务
[root@xuegod140 ~]# systemctl stop atd #关闭atd服务
使用at创建任务计划
[root@xuegod140 ~]# at 23:33 #23:33创建一个test目录
at> mkdir /tmp/test
at> 
job 1 at Tue Apr 16 23:33:00 2019
[root@xuegod140 ~]# at -l #查看计划任务,atq也可以查看计划任务
1    Tue Apr 16 23:33:00 2019 a root
at计划任务的特殊写法
[root@xuegod140 ~]# at now +50min #当前时间50分钟以后执行任务
[root@xuegod140 ~]# at 20:00 2019-4-17 #2019-4-17 20:00 执行任务
[root@xuegod140 ~]# at 6:00 +3days #三天以后的6:00执行任务
at计划任务的目录文件
[root@xuegod140 ~]# ls /var/spool/at/a00002018b912b
/var/spool/at/a00002018b912b
[root@xuegod140 ~]# tail -3 !$
tail -5 /var/spool/at/a00002018b912b
rm -rf /tmp/test
marcinDELIMITER13ba1c4f
[root@xuegod140 ~]# atq
2Wed Apr 17 00:43:00 2019 a root
[root@xuegod140 ~]# at -c 2 | tail -3
rm -rf /tmp/test
marcinDELIMITER13ba1c4f
cron服务的管理
[root@xuegod140 ~]# systemctl status crond
[root@xuegod140 ~]# systemctl start crond
[root@xuegod140 ~]# systemctl stop crond
[root@xuegod140 ~]# systemctl enable crond
[root@xuegod140 ~]# systemctl disable crond

每天凌晨2点1分开始备份数据
[root@xuegod140 ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@xuegod140 ~]# crontab -l
1 2 * * * tar cf /opt/grub.tar /boot/grub/

日志的种类
在centos7中,系统日志消息有两个服务负责处理:systemd-journald和rsyslog
常见日志文件概述:/var/log目录保管由rsyslog维护的,里面存放的一些特定于系统和服务的日志文件
日志文件 用途
/var/log/message 大多数系统日志消息记录在此处。有也例外的:如与身份验证,电子邮件处理相关的定期作业任务等
/var/log/secure    安全和身份验证相关的消息和登录失败的日志文件。 ssh远程连接产生的日志
/var/log/maillog    与邮件服务器相关的消息日志文件
/var/log/cron    与定期执行任务相关的日志文件
/var/log/boot.log    与系统启动相关的消息记录
/var/log/dmesg    与系统启动相关的消息记录

 

以上是关于crontab实现秒级计划任务的主要内容,如果未能解决你的问题,请参考以下文章

计划任务

CentOS7计划任务crontab

linux使用crontab实现PHP执行计划定时任务

Linux任务计划周期性任务执行之cron/crontab

Linux中的计划任务—Crontab调度重复执行的任务

Linux基础-crontab计划任务