Cron作业只能在一周中的某一天在一段时间内运行

Cron作业只能在一周中的某一天在一段时间内运行,cron,crontab,cronexpression,Cron,Crontab,Cronexpression,最后,这两个都运行了。我做错什么了吗?这是crontab格式: 0 0 2-31 * sun /home/ubuntu/x.h 0 0 2-31 * mon-sat /home/ubuntu/y.h UbuntuMan5crontab说: * * * * * | | | | | | | | | +---- Day of the Week (range: 0-6, 0 standing for Sunday) | | | +------ Month of the Ye

最后,这两个都运行了。我做错什么了吗?

这是crontab格式:

0 0 2-31 * sun         /home/ubuntu/x.h
0 0 2-31 * mon-sat     /home/ubuntu/y.h
Ubuntu
Man5crontab
说:

* * * * *
| | | | |
| | | | +---- Day of the Week   (range: 0-6, 0 standing for Sunday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month  (range: 1-31)
| +---------- Hour              (range: 0-23)
+------------ Minute            (range: 0-59)
因此,这应该对您有用:

  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)
我不知道为什么7会在周六运行——你的系统时间准确吗?在正确的时区吗

编辑:啊,是的,很遗憾,您不能同时指定星期几和月份几。从
man 5 crontab

注意:命令的执行日期可以由两个字段指定-月日和周日。如果两个字段都受到限制(即,不*),则当任一字段与当前时间匹配时,将运行该命令。例如,`30 4 1,15*5''将导致在每月1日和15日上午4:30以及每个星期五运行命令。但是,可以通过向命令添加测试来实现所需的结果(请参见下面示例CRON文件中的最后一个示例)

因此,答案是:

0 0 2-31 * 0         /home/ubuntu/x.h
0 0 2-31 * 1-6       /home/ubuntu/y.h

$(日期'+%u')
返回1-7,表示周一到周日。例如,请尝试
echo$(日期'+%u')

当然,它最终会同时运行这两个命令。我猜你的意思是在同一天。如果是这样,你有证据吗?从2-31天开始,如果是周日x.h应该运行,非周日2-31天y.h应该运行这对我不起作用,我尝试了
20 13 2-31*7/home/ubuntu/x.h
但它今天也运行,这是周六抱歉,修复了!Ubuntu的格式不同。0是星期天。不知道为什么7在周六运行。它仍然不起作用!,这很奇怪,月日和星期日是叠加的吗?我试着运行
1358**6
,效果很好,但是添加了一个日期范围,覆盖了周检查的日期。我说的对吗?啊,哇,我学到了一些东西!请参阅我的编辑。我不知道
crontab
的行为是这样的:)如果两个日期说明符都存在,则其中一个必须匹配,而不是两个都匹配。感谢帮助,该方法有效,但测试没有:(.尽管这有效
test$(date+\%u)-eq 7
您能对答案进行更改,以便我能接受它吗?
0 0 2-31 * *       test $(date +\%u) -eq 7 && /home/ubuntu/x.h
0 0 2-31 * *       test $(date +\%u) -ne 7 && /home/ubuntu/y.h
from datetime import datetime
from datetime import timedelta
import urllib.request

//urls to hit
urls=["https//:example1.com","https//:example2.com"
]

//function to hit url
def call(url):
 urllib.request.urlopen(url)

//function to get date 
def get_month_diff(current,nom):
    m1= current
    m2=m1 - timedelta(days=nom*30)
    m3=current
    m4=m2.replace(day=1)
    m5=m3.replace(day=1)-timedelta(days=1)
    list=str(m4).split(" ")[0].split("-")
    list.reverse()
    startDate="-".join(list)
    list1=str(m5).split(" ")[0].split("-")
    list1.reverse()
    endDate="-".join(list1)
    for i in range (0,5):
       call(urls[i]+""+startDate+"/"+endDate)
//main execution function
def solve():
    month=str(datetime.today()).split("-")[1]
    if month in ["01","04","07","10"] :get_month_diff(datetime.today(),3)
    if month in ["01","07"]:get_month_diff(datetime.today(),6)
    get_month_diff(datetime.today(),1)
solve()