只在工作日执行的脚本

德祖
• 阅读 2733

有时候我们会需要定时执行一个脚本,那么可以用cronjob来完成,比如这样:

10 04 * * * /usr/local/bin/somework.sh

有时候,只希望这个脚本在工作日执行,比如这样:

10 04 * * 1-5 /usr/local/bin/somework.sh

但是工作日有时候又不是简单的周一到周五,比如赶上个小长假什么的,有时候周六要上班,有时候周一又不上班,这时候这样的设置就容易乱,那我们怎么设置这个cronjob才能让他预知我们的放假排班计划,并做到丝毫不乱呢?

只用cron是不行的,我们需要在脚本里调取一个开放接口获知放假安排,然后就可以按计划执行了。

这个开放接口在这里: https://github.com/NateScarle...

我们简单写一个脚本:

#!/usr/local/bin/python
"""每天定时执行脚本"""
import datetime
import requests


def will_work(date):
    """检查该天是否需要工作"""
    holiday_data = requests.get(
        url='https://natescarlet.coding.net/p/github/d/holiday-cn/git/raw/master/2022.json'
    ).json()
    # 放入公司规定的特殊考勤日
    holiday_data['days'].append({
        'date': '2022-06-21',
        'isOffDay': False
    })
    # 检查该日期是否在列表中
    days_in_list = [day for day in holiday_data['days'] if day['date']
                    == datetime.datetime.strftime(date, '%Y-%m-%d')]
    if days_in_list:
        # 是否在节假日倒休表里,如果在倒休表里,按倒休表作息
        return not (days_in_list[0]["isOffDay"])
    else:
        # 按照周一至周五作息
        return True if date.weekday() < 5 else False


def main():
    """主函数"""
    if will_work(datetime.datetime(2022, 6, 21, 0, 0, 0, 0)):
        print("今天要上班")
    else:
        print("今天不上班")


if __name__ == '__main__':
    main()

赋予它执行权限:

chmod +x somework.py

然后定一下cronjob:

10 04 * * * /usr/local/bin/somework.py

就可以每个工作日执行了。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
洛竹 洛竹
4年前
发布一个 Homebrew 包
相关概念Keg(酒桶)安装好的脚本、软件等。比如gh,如果有安装。执行下面的指令可查看位置:shellopen/usr/local/bin/ghCellar(酒窖)所有用Homebrew安装在本地的脚本、软件组成的集合。可以通过以下指令查看本地目前都安装了哪些脚本:shellopen/usr/local/Ce
lucien-ma lucien-ma
4年前
python文件的第一行 #!/usr/bin/python3 是什么意思?
python文件的第一行代码通常在脚本语言的第一行会看到:!/usr/bin/envpython或!/usr/bin/python首先要确定的一点是它不是注释。这两句话的目的都是指出你的python文件用什么可执行程序去运行它。1.!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释
Stella981 Stella981
3年前
Linux 定时任务crontab
_安装crontab__yuminstallvixiecron__yuminstallcrontabs__创建定时任务_vi/etc/crontab加入一项任务:每2分钟执行一次python脚本并写日志到knowpy.log\/2\\\\/usr/local/python3/bin/pyth
Wesley13 Wesley13
3年前
PHP之定时任务的概念和实现
目录1.前言2.实现定时任务的几种方案2.1简单直接不顾后果型2.2简单可控型2.3简单改进型2.4服务器定时任务2.4.1在Crontab中执行本地脚本2.4.2在Crontab中使用URL执行脚本3.函数ini\_set用法详解3.1函数格式
Stella981 Stella981
3年前
Centos服务器中多版本Python带来的困惑问题
最近写了几个在crond中使用的python定时执行脚本。其中使用了datetime包中的timedelta的total\_seconds()方法。配置定时执行的方式也很简单,就写成了\/5\\\\rootpythonabc.py写好后,发现定时执行的脚本每次执行都会报错,说找不到total\_seconds方法。在脚本中导入
Stella981 Stella981
3年前
Python远程获取MD5校验码并在web上显示
一、编写python脚本,远程执行命令获取MD5校验码,脚本放到CGI路径下!/usr/bin/envpythoncoding:utf8"""ThisrunsacommandonaremotehostusingSSH.Atthe
Wesley13 Wesley13
3年前
PHP的超时实现
我们知道PHP可以设置一个脚本执行的超时时间,也就是脚本的执行时间不能超过设置的超时时间.那么PHP是怎么做到这个功能的呢?  其实PHP的超时功能利用了操作系统的定时信号来实现的,在一个请求开始时(php\_request\_startup),PHP便会利用zend\_set\_timeout()接口来设置一个定时器信号,
Stella981 Stella981
3年前
Jenkins入门之执行定时任务
通过前面我们讲解了如何通过Jenkins执行windowscommand,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下BuildNow按钮来执行任务构建的,有些时候我们可能需要定时执行一些脚本,Jenkins也是支持的,下面就讲一下如何使用Jenkins执行定时任务.我们新建一个自由式(FreeSt
Stella981 Stella981
3年前
Docker 容器监控平台
官网地址:https://www.weave.works/oss/scope/安装  执行如下脚本安装运行WeaveScope。  curlLgit.io/scopeo/usr/local/bin/scope  chmodax/usr/local/bin/scope启动
德祖
德祖
Lv1
没有期待的日子反而顺顺利利。
文章
4
粉丝
0
获赞
0