“每天一命令之crontab”的版本间的差异
跳到导航
跳到搜索
(未显示同一用户的14个中间版本) | |||
第1行: | 第1行: | ||
= 秒级定时任务= | = 秒级定时任务= | ||
<pre> | <pre> | ||
+ | #5s 执行一次 | ||
* * * * * /usr/bin/curl http://www.test.com | * * * * * /usr/bin/curl http://www.test.com | ||
* * * * * sleep 5; /usr/bin/curl http://www.test.com | * * * * * sleep 5; /usr/bin/curl http://www.test.com | ||
第13行: | 第14行: | ||
* * * * * sleep 50; /usr/bin/curl http://www.test.com | * * * * * sleep 50; /usr/bin/curl http://www.test.com | ||
* * * * * sleep 55; /usr/bin/curl http://www.test.com | * * * * * sleep 55; /usr/bin/curl http://www.test.com | ||
+ | |||
+ | |||
+ | 这样写就实现了每10秒执行一次,用了5个计划任务。如果要实现每5秒,甚至是每1秒执行一次,就要写59行计划任务了,显然太繁琐,可以用一个脚本的方式实现: | ||
+ | |||
+ | #!/bin/bash | ||
+ | step=1 #间隔的秒数,不能大于60 | ||
+ | for ((i=0;i<60;i=(i+step)));do | ||
+ | $(date>>/mnt/file) #here you command | ||
+ | sleep $step | ||
+ | done | ||
+ | exit 0 | ||
</pre> | </pre> | ||
+ | =N小时执行一次= | ||
+ | <pre> | ||
+ | |||
+ | Note | ||
+ | 真正的每隔一小时、每隔105分钟执行的定时任务应该如何写呢?如下: | ||
+ | |||
+ | */60 * * * * #每60分钟即每小时执行一次 | ||
+ | */105 * * * * #每105分钟执行一次 | ||
+ | |||
+ | 不严格来说 这也是可用的 | ||
+ | 这种也是错误的写法,这种能充分展示前面一小时执行一次带来的迷惑感,这种写法其实是每整3小时的0分执行一次。也就是说,它会在每天的3点、9点、12点...等3的整数倍时间点来执行,并不是真正意义上每隔3个小时执行 | ||
+ | |||
+ | 0 */3 * * * /script.sh | ||
+ | #每3小时执行一次 | ||
+ | |||
+ | |||
+ | #半小时执行一次 | ||
+ | 0 0/30 * * * | ||
+ | |||
+ | |||
+ | 每2天 | ||
+ | 15 0 */2 * * | ||
+ | |||
+ | </pre> | ||
+ | [https://blog.csdn.net/jinguangliu/article/details/83013646 如何使用cron任务每隔2天在固定时间执行任务] | ||
+ | |||
+ | =知识点= | ||
+ | <pre> | ||
+ | man 5 crontab | ||
+ | |||
+ | field allowed values | ||
+ | ----- -------------- | ||
+ | minute 0-59 | ||
+ | hour 0-23 | ||
+ | day of month 1-31 | ||
+ | month 1-12 (or names, see below) | ||
+ | day of week 0-7 (0 or 7 is Sun, or use names) | ||
+ | |||
+ | |||
+ | |||
+ | 30 7 8 * * ls 指定每月8号的7:30分执行ls命令 | ||
+ | </pre> | ||
+ | |||
+ | =crontab 脚本不能运行= | ||
+ | <pre> | ||
+ | |||
+ | #on debian | ||
+ | |||
+ | 1. | ||
+ | 这里要写绝对路径 不然 scrapy 找不到命令 | ||
+ | 或者 脚本加声明 /usr/local/bin/ | ||
+ | # 爬虫任务 | ||
+ | def task_scrapy_aicoin(): | ||
+ | os.system("/usr/local/bin/scrapy crawl aicoin") | ||
+ | |||
+ | |||
+ | 2. | ||
+ | 要进入 对应的目录 | ||
+ | |||
+ | |||
+ | Unknown command: crawl | ||
+ | |||
+ | Use "scrapy" to see available commands | ||
+ | |||
+ | |||
+ | 记得查看日志 看日志排错就对了 | ||
+ | tail /var/mail/mail | ||
+ | |||
+ | |||
+ | </pre> | ||
=see also= | =see also= | ||
[http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html 每天一个linux命令(50):crontab命令] | [http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html 每天一个linux命令(50):crontab命令] | ||
+ | |||
+ | [https://www.jianshu.com/p/d93e2b177814 关于定时执行任务:Crontab的20个例子] | ||
+ | |||
+ | |||
+ | [https://blog.csdn.net/weixin_37998647/article/details/78669940 crontab实现秒级的计划任务] | ||
+ | |||
+ | [https://www.cnblogs.com/handle/p/9246197.html Linux crontab 实现秒级定时任务 ] | ||
+ | |||
+ | [https://blog.csdn.net/xinyflove/article/details/83178876 crontab的语法规则格式(每分钟、每小时、每天、每周、每月、每年定时执行 规则)] | ||
[[category:ops]] | [[category:ops]] |
2022年2月17日 (四) 01:33的最新版本
秒级定时任务
#5s 执行一次 * * * * * /usr/bin/curl http://www.test.com * * * * * sleep 5; /usr/bin/curl http://www.test.com * * * * * sleep 10; /usr/bin/curl http://www.test.com * * * * * sleep 15; /usr/bin/curl http://www.test.com * * * * * sleep 20; /usr/bin/curl http://www.test.com * * * * * sleep 25; /usr/bin/curl http://www.test.com * * * * * sleep 30; /usr/bin/curl http://www.test.com * * * * * sleep 35; /usr/bin/curl http://www.test.com * * * * * sleep 40; /usr/bin/curl http://www.test.com * * * * * sleep 45; /usr/bin/curl http://www.test.com * * * * * sleep 50; /usr/bin/curl http://www.test.com * * * * * sleep 55; /usr/bin/curl http://www.test.com 这样写就实现了每10秒执行一次,用了5个计划任务。如果要实现每5秒,甚至是每1秒执行一次,就要写59行计划任务了,显然太繁琐,可以用一个脚本的方式实现: #!/bin/bash step=1 #间隔的秒数,不能大于60 for ((i=0;i<60;i=(i+step)));do $(date>>/mnt/file) #here you command sleep $step done exit 0
N小时执行一次
Note 真正的每隔一小时、每隔105分钟执行的定时任务应该如何写呢?如下: */60 * * * * #每60分钟即每小时执行一次 */105 * * * * #每105分钟执行一次 不严格来说 这也是可用的 这种也是错误的写法,这种能充分展示前面一小时执行一次带来的迷惑感,这种写法其实是每整3小时的0分执行一次。也就是说,它会在每天的3点、9点、12点...等3的整数倍时间点来执行,并不是真正意义上每隔3个小时执行 0 */3 * * * /script.sh #每3小时执行一次 #半小时执行一次 0 0/30 * * * 每2天 15 0 */2 * *
知识点
man 5 crontab field allowed values ----- -------------- minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sun, or use names) 30 7 8 * * ls 指定每月8号的7:30分执行ls命令
crontab 脚本不能运行
#on debian 1. 这里要写绝对路径 不然 scrapy 找不到命令 或者 脚本加声明 /usr/local/bin/ # 爬虫任务 def task_scrapy_aicoin(): os.system("/usr/local/bin/scrapy crawl aicoin") 2. 要进入 对应的目录 Unknown command: crawl Use "scrapy" to see available commands 记得查看日志 看日志排错就对了 tail /var/mail/mail