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 与系统启动相关的消息记录