如何在cron中每个月的第一个工作日运行脚本?

雪茶山

我必须将cronjob设置为每个月的第一个工作日,这意味着脚本应在每个月的第一个工作日运行

如果假设第一个工作日是假期,那么脚本应在第二个工作日运行。例如:2015年1月1日是假期,那么脚本应在2015年1月2日运行。

约翰1024

首先,运行date命令:

$ date '+%x'
12/29/2014

%x告诉日期以当前语言环境的格式显示今天的日期。使用完全相同的格式,将假日列表放在名为的文件中holidays例如:

$ cat holidays
01/01/2015
07/04/2015

接下来,创建以下shell脚本:

#!/bin/sh
dom=$(date '+%d') # 01-31, day of month
year=$(date '+%Y') # four-digit year
month=$(date '+%m') # two-digit month

nworkdays=0
for d in $(seq 1 $dom)
do
    today=$(date -d "$year-$month-$d" '+%x') # locale's date representation (e.g. 12/31/99)
    dow=$(date -d "$year-$month-$d" '+%u')   # day of week: 1-7 with 1=Monday, 7=Sunday
    if [ "$dow" -le 5 ]  && grep -vq "$today" /path/holidays
    then
        workday=Yes
        nworkdays=$((nworkdays+1))
    else
        workday=
    fi
done
[ "$workday" ] && [ "$nworkdays" -eq 1 ] && /path/command

在哪里/path/command替换为要在该月的第一个工作日运行的命令。同样,/path/holidays用正确的holidays文件路径替换

最后,告诉cron每天运行上述脚本。command将只在每月的第一个工作日执行。

怎么运行的

让我们看一下脚本的核心:

  • for d in $(seq 1 $dom); do

    这将启动一个循环,将变量d从1开始运行到当前日期。

  • today=$(date -d "$year-$month-$d" '+%x') # locale's date representation (e.g. 12/31/99)

    这将设置为该月和today该年的日期的日期字符串d

  • dow=$(date -d "$year-$month-$d" '+%u') # day of week: 1-7 with 1=Monday, 7=Sunday

    设置dow为星期几,d其中1 =星期一,7 =星期日。

  • if [ "$dow" -le 5 ] && grep -vq "$today" /path/holidays

    测试将"$dow" -le 5 ]验证这一天d为工作日(星期一至星期五)。测试将grep -vq "$today" /path/holidays验证该d日期是否未出现在holidays文件中。如果两个测试都正确,则dayd是工作日,该then子句将被执行:

  • then workday=Yes; nworkdays=$((nworkdays+1))

    then子句设置workday为,Yes并且还增加了本月到目前为止的工作日数:nworkdays

  • else workday=

    else子句套workday回空字符串。

  • fi

    fi表示if语句结束

  • done

    done表示for循环结束

  • [ "$workday" ] && [ "$nworkdays" -eq 1 ] && /path/command

    for语句中的最后一个循环是今天的日期。因此,如果workday=Yes循环结束后,那么今天就是工作日。此外,如果是nworkdays=1,则今天是该月第一个工作日。如果两个条件都成立,那么将/path/command执行您的命令

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel - VBA 每个月的第一个工作日

来自分类Dev

如何在每个月的第一个星期四安排cron

来自分类Dev

在每个月的第一个星期一执行cron工作?

来自分类Dev

在Shell脚本中将Cron Job设置为每月的第一个工作日

来自分类Dev

每3个月的第一个工作日建立一份cron作业

来自分类Dev

Cron-如何在一个月的特定日期之后的第一个工作日进行工作?

来自分类Dev

node-schedule 每个月的第一个星期一运行

来自分类Dev

C# 如何在每个月的第一个日期重置自动增量 ID

来自分类Dev

下个月的第一个工作日

来自分类Dev

计算每个月的第8个工作日

来自分类Dev

给定一定的日期,如何在MySQL中获得与同一个工作日的上个月的第一天

来自分类Dev

在每月的第一个工作日触发

来自分类Dev

当第一个脚本中调用的脚本以错误代码退出时,如何继续运行脚本?

来自分类Dev

在MySQL中获取某个月的第一个和最后一个工作日日期

来自分类Dev

熊猫日期索引:选择每个月的第一个元素

来自分类Dev

在PHP中测试每月的第一个工作日

来自分类Dev

如何为一个月的第 10 个工作日编写 cron 表达式?

来自分类Dev

启用每个月的第一个和最后一个星期天jquery日历

来自分类Dev

熊猫:仅从工作日的时间戳中检测第一个/最后一个记录号

来自分类Dev

在每个月的第一个星期一的活动开始前7天显示警报

来自分类Dev

在一个月内获得工作日

来自分类Dev

如何在固定日期之后的每个月中增加一个整数?

来自分类Dev

检查今天是否是每月的第一个工作日?

来自分类Dev

当月的第一个工作日-SQL Server

来自分类Dev

Msgbox 在 2 月 VBA 的第一个工作日弹出

来自分类Dev

选择 [日期] 之后的第一个工作日

来自分类Dev

如何在我的 sql 中获取整个月的每个月的第一天的数据?

来自分类Dev

如何获得一个月中特定工作日的所有日子?

来自分类Dev

如何安排任务在每个工作日(每月的第一天除外)运行

Related 相关文章

  1. 1

    Excel - VBA 每个月的第一个工作日

  2. 2

    如何在每个月的第一个星期四安排cron

  3. 3

    在每个月的第一个星期一执行cron工作?

  4. 4

    在Shell脚本中将Cron Job设置为每月的第一个工作日

  5. 5

    每3个月的第一个工作日建立一份cron作业

  6. 6

    Cron-如何在一个月的特定日期之后的第一个工作日进行工作?

  7. 7

    node-schedule 每个月的第一个星期一运行

  8. 8

    C# 如何在每个月的第一个日期重置自动增量 ID

  9. 9

    下个月的第一个工作日

  10. 10

    计算每个月的第8个工作日

  11. 11

    给定一定的日期,如何在MySQL中获得与同一个工作日的上个月的第一天

  12. 12

    在每月的第一个工作日触发

  13. 13

    当第一个脚本中调用的脚本以错误代码退出时,如何继续运行脚本?

  14. 14

    在MySQL中获取某个月的第一个和最后一个工作日日期

  15. 15

    熊猫日期索引:选择每个月的第一个元素

  16. 16

    在PHP中测试每月的第一个工作日

  17. 17

    如何为一个月的第 10 个工作日编写 cron 表达式?

  18. 18

    启用每个月的第一个和最后一个星期天jquery日历

  19. 19

    熊猫:仅从工作日的时间戳中检测第一个/最后一个记录号

  20. 20

    在每个月的第一个星期一的活动开始前7天显示警报

  21. 21

    在一个月内获得工作日

  22. 22

    如何在固定日期之后的每个月中增加一个整数?

  23. 23

    检查今天是否是每月的第一个工作日?

  24. 24

    当月的第一个工作日-SQL Server

  25. 25

    Msgbox 在 2 月 VBA 的第一个工作日弹出

  26. 26

    选择 [日期] 之后的第一个工作日

  27. 27

    如何在我的 sql 中获取整个月的每个月的第一天的数据?

  28. 28

    如何获得一个月中特定工作日的所有日子?

  29. 29

    如何安排任务在每个工作日(每月的第一天除外)运行

热门标签

归档