踩坑记录之crontab每10秒执行一次问题

目录
  • crontab每10秒执行一次问题
  • linux crontab使用技巧
    • crontab命令格式
    • 特殊字段说明
    • 每天晚上10点运行rumenz.sh脚本
    • 每月的1,3,7的早上8.30运行rumenz.sh
    • 每周六,日的的凌晨2点执行rumenz.sh
    • 每天的的18点到23点每30分执行rumenz.sh
    • 每天凌晨2点访问一个网址
    • crontab每10秒执行一次rumenz.sh
    • 每 90 分钟运行一次rumenz.sh
    • 每90秒执行一次rumenz.sh
  • 总结

crontab每10秒执行一次问题

需求:linux中使用crontab每十秒执行一次

场景:需要在ubuntu14服务器中使用代理每十秒执行一次curl来访问互联网,来测试代理网络稳定性。

经过网上的大量搜贴之后得到的可用的一个结论如下:

# crontab -e
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 30; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 40; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 50; /usr/local/cc.sh >>/usr/local/log.txt 2>&1

如果你是直接一梭子全复制,改下目录那么恭喜你完成了计划任务。而我就不是了,我只写了sleep 10 这条然后任务没有执行。这就是坑。

坑1 .上面sleep 10 20 30 ...是啥意思啊,怎么个规则啊。一头雾水,当时我是直接把第二个sleep 10 那个定时任务直接粘进去的。然后,任务没有执行就一直纠结任务没有执行这个问题。

坑2.ubuntu系统第一次使用crontab -e 需要选择比编辑器,如果选nano上,对我这种小白可就蒙圈。最后在命令行使用, select-ediort 来选择编辑器选3 vim 就好了

后来,明白后做了实验。

如果只写前两条的话是:在每分钟的第一秒和第一个10秒执行一次

 * * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
 * * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1

以此类推只写前三的话就是:

在每分钟的第一、第一个十秒、第二个十秒分别执行一次

* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
* * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1

如果都写上的话就是每十秒执行一次啦,完美过程

过程遇到的问题(1):crontab -e 完都有新邮件

原因:

1.crontab 每次执行完程序产生的输出都会发邮件到/var/mail/root

2.定时任务语法有误,/var/mail/root  发送的是错误日志,如下

root@bogon:/usr/local# tail -20 /var/mail/root

From root@bogon Tue May 21 18:31:11 2019Return-Path: <root@bogon>X-Original-To: rootDelivered-To: root@bogonReceived: by bogon (Postfix, from userid 0) id AAFCB43077; Tue, 21 May 2019 18:31:11 +0800 (CST)From: root@bogon (Cron Daemon)To: root@bogonSubject: Cron <root@bogon> sleep 10; sh /home/liuxin/curl-status.sh >dev/null 2>&1Content-Type: text/plain; charset=ANSI_X3.4-1968X-Cron-Env: <SHELL=/bin/sh>X-Cron-Env: <HOME=/root>X-Cron-Env: <PATH=/usr/bin:/bin>X-Cron-Env: <LOGNAME=root>Message-Id: <20190521103111.AAFCB43077@bogon>Date: Tue, 21 May 2019 18:31:11 +0800 (CST) /bin/sh: 1: cannot create dev/null: Directory nonexistent

解决:

如果是1的话就放到黑洞  >/dev/null 2>&1

* * * * * /usr/local/cc.sh >/dev/null 2>&1

精讲:

1,/dev/null是linux系统的一个垃圾桶(一个不正经的比喻)有不用的输出都可以往里面扔。>/dev/null 缺省默认是1 即 1>/dev/null

2,linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1,2    2>&1就是把2错误输出重定向到1标准输出  而1又输出到/dev/null黑洞

如果不想输出到一个文件可以这样写

* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1

过程中遇到的问题(2):如图crontab -e 后是新文件

解决:crontab语法错误再三检查后,建议select-editor 选3  vim

linux crontab使用技巧

crontab命令主要用于设置命令行或者脚本周期性的执行。该命令从标准输入设备读取指令,并将其存放于文件中,以供之后读取和执行。

主要讲述crontb命令的基本语法和配置方法。

crontab命令格式

crontab [-u user] -e -l -r
  • -u 用户名,不加-u参数默认为当前用户。
  • -e 编辑crontab文件。
  • -l 列出crontab文件中的内容。取值来源为/var/spool/cron下对应的文件
  • -r 删除crontab文件。

crontab命令格式

# 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
 |  |  |  |  |
 *  *  *  *  * command/script

一个定时任务的配置共包括6个字段,分别是分、时、日、月、周、命令行或脚本,每一列取值的范围或者含义如上述格式中注释描述。

特别注意一点是命令行或者脚本一定要配置成绝对路径。

特殊字段说明

  • 星号(*):代表所有可能的值,例如在第1列表示每分钟执行,第2列表示每小时执行,第3列表示每天执行。
  • 逗号(,):可以用逗号隔开的值表示指定一个列表范围,例如,在第1列设置15,30,45表示在第15分钟、30分钟、45分钟执行。
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如"2-6"表示2,3,4,5,6
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如第2列设置成"*/2",表示每两小时执行一次。

每天晚上10点运行rumenz.sh脚本

0 22 * * * /root/rumenz.sh

每月的1,3,7的早上8.30运行rumenz.sh

> 30 8 1,3,7 * * /root/rumenz.sh

每周六,日的的凌晨2点执行rumenz.sh

> 0 2 * * 6,0 /root/rumenz.txt

每天的的18点到23点每30分执行rumenz.sh

0,30 18-23 * * /root/rumenz.sh

//或者

*/30 18-23 * * /root/rumenz.sh

每天凌晨2点访问一个网址

> 0 2 * * * /usr/bin/curl https://rumenz.com

crontab每10秒执行一次rumenz.sh

* * * * * /root/rumenz.sh
* * * * * sleep 10;/root/rumenz.sh
* * * * * sleep 20;/root/rumenz.sh
* * * * * sleep 30;/root/rumenz.sh
* * * * * sleep 40;/root/rumenz.sh
* * * * * sleep 50;/root/rumenz.sh

每 90 分钟运行一次rumenz.sh

0 0-21/3 * * * /root/rumenz.sh
30 0-22/3 * * * /root/rumenz.sh

需要两个表达式实现

每90秒执行一次rumenz.sh

*/3 * * * * /root/rumenz.sh
*/3 * * * * sleep 90;/root/rumenz.sh

需要两个表达式实现

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Linux中crontab定时任务不执行的原因

    最近在linux中遇到了个crontab定时任务不执行的case,在这给大家分享一下,避免踩到我遇到的坑. 先贴脚本吧 为了方便展示,把脚本入参,都写死了 #!/usr/bin/env bash # 1输出文件,到log 例如: bg # 2 目标文件目录 不带最后的/ 例如:/opt/flume/home/hdp_lbg_ectech/rawdata/xxx/web_vip_bg # 3 执行的时候选择前几天的日志 例如:1 LAST_DAY=$(date +"%Y-%m-%d" -

  • crontab执行时间与系统时间不一致问题解决

    前言 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为"crontab",是"cron table"的简写. cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业. service crond start //启动服务 service crond stop //关闭服务 service cron

  • crontab定时任务不执行的一些原因总结

    前言 最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这5个原因: 1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止.如果停止了就无法执行任何定时任务了,解决的方法是打开它: crond 或 service crond start 如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装: yum -y install crontabs 2 权

  • 踩坑记录之crontab每10秒执行一次问题

    目录 crontab每10秒执行一次问题 linux crontab使用技巧 crontab命令格式 特殊字段说明 每天晚上10点运行rumenz.sh脚本 每月的1,3,7的早上8.30运行rumenz.sh 每周六,日的的凌晨2点执行rumenz.sh 每天的的18点到23点每30分执行rumenz.sh 每天凌晨2点访问一个网址 crontab每10秒执行一次rumenz.sh 每 90 分钟运行一次rumenz.sh 每90秒执行一次rumenz.sh 总结 crontab每10秒执行一

  • crontab每10秒执行一次的实现方法

    实例如下: vim /var/spool/cron/root * * * * * sleep 10; /usr/bin/curl http://localhost/index.php * * * * * sleep 20; /usr/bin/curl http://localhost/index.php * * * * * sleep 30; /usr/bin/curl http://localhost/index.php * * * * * sleep 40; /usr/bin/curl ht

  • Java踩坑记录之BigDecimal类

    前言 在java.math包中提供了对大数字的操作类,用于进行高精确计算,如BigInteger,BigDecimal类.而平常我们开发中使用最多的float和double只能适用于一般的科学和工程计算,如果要在比较精确的计算方面如货币,那么使用float和double会相应的丢失精度,因此用于精密计算大数字的类BigDecimal就必不可少了.所以BigDecimal适合商业计算场景,用来对超过16位有效位的数进行精确的运算.但是BigDecimal的使用并不像float和double那样,使

  • 详解element-ui 组件el-autocomplete使用踩坑记录

    项目遇到一个比较麻烦的需求,保存用户填写的历史记录,项目使用的element-ui,自然就使用了el-autocomplete组件,然后就是各种踩坑,以下记录以下写代码过程中遇到的问题 createFilter(queryString, filed) { console.log("createFilter==" + queryString) return (item) => { switch (filed) { case 'cardNum': break case 'cardPa

  • .net core 3.1在iis上发布的踩坑记录

    前言 写这篇文章的目的是希望像我一样喜欢.net 的人在发布 core到 iis上时少走点弯路 网上找了些资料,其实实际操作比较简单,就是有几个坑很恶心 踩坑记录 首先是你的服务器需要有core 的运行环境,安装前先关闭iis dotnet-hosting-3.1.4-win.exe 可以去微软的官网找最新的版本(去微软的官网找你要的版本就好了) 安装成功后,第一个坑出现了,启动iis,发现原来在iis上的网站都报503错误了. 直接玩大了,最后发现就是这个东西搞的鬼,你卸载它iis之前的网站就

  • Linux/Docker 中使用 System.Drawing.Common 踩坑记录分享

    前言 在项目迁移到 .net core 上面后,我们可以使用 System.Drawing.Common 组件来操作 Image,Bitmap 类型,实现生成验证码.二维码,图片操作等功能.System.Drawing.Common 组件它是依赖于 GDI+ 的,然后在 Linux 上并没有 GDI+,面向谷歌编程之后发现,Mono 团队使用 C语言 实现了GDI+ 接口,提供对非Windows系统的 GDI+ 接口访问能力,这个应该就是libgdiplus.所以想让代码在 linux 上稳定运

  • Java踩坑记录之Arrays.AsList

    前言 java.util.Arrays的asList方法可以方便的将数组转化为集合,我们平时开发在初始化ArrayList时使用的比较多,可以简化代码,但这个静态方法asList()有几个坑需要注意: 一. 如果对集合使用增加或删除元素的操作将会报错 如下代码: List list = Arrays.asList("a","b","c"); list.add("d"); 输出结果: Exception in thread &q

  • 关于python scrapy中添加cookie踩坑记录

    问题发现: 前段时间项目中,为了防止被封号(提供的可用账号太少),对于能不登录就可以抓取的内容采用不带cookie的策略,只有必要的内容才带上cookie去访问. 本来想着很简单:在每个抛出来的Request的meta中带上一个标志位,通过在CookieMiddleware中查看这个标志位,决定是否是给这个Request是否装上Cookie. 实现的代码大致如下: class CookieMiddleware(object): """ 每次请求都随机从账号池中选择一个账号去访

  • python中remove函数的踩坑记录

    摘要: 在python的使用过程中,难免会遇到要移除列表中对象的要求.这时可以使用remove函数. 对于python中的remove()函数,官方文档的解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一个匹配的元素. 语法 list.remove() 参数 obj 参数:从列表中删除的对象的索引 返回值 删除后不会返回值 常见用法: a = [1,2,3,4],a.remove(1),然后a就是[2,3,4]:对于a = [1,1,1

  • Echarts在Taro微信小程序开发中的踩坑记录

    背景 近期笔者在使用Taro进行微信小程序开发,当引入Echarts图表库时,微信检测单包超限2M的一系列优化措施的踩坑记录,期望能指导读者少走一些弯路. 为什么选择Echarts? 微信小程序目录市面上使用最多的两款图表库,如下: echarts-for-weixin--echarts微信小程序版本 wx-charts--基于微信小程序的图表库 对比两款图表库优缺点刚好相反. echarts-for-weixin:功能强大,但体积非常大 wx-charts:功能相对简单,但体积小 由于笔者对e

随机推荐