工作日但不是周末安排脚本,如果周末则在周五运行

时间:2017-08-18 18:27:06

标签: shell cron

我想安排一个shell脚本在每个月的17日运行,只有当17日是工作日时。然而,如果17日是周末,我希望剧本在星期五之前运行(例如,如果17日是星期六,我想在星期五16日运行剧本,或者如果17日是星期日,我想运行脚本于15日星期五)。我已经探索过cron,但我不确定这是否会起作用

00 08 17 * 1-5 <script to be run>

我相信这只会在17日运行脚本,如果它是一个工作日,我想如果它是一个周末就不会运行。

如果本月17日是周末,我怎么能在星期五之前运行脚本呢?

2 个答案:

答案 0 :(得分:0)

如果你想使用cronjob,你必须使用2个crons:
1.在工作日每17日运行一次作为你的设置:

00 08 17 * 1-5 <script to be run>

2。如果下一个Sartuday / Sunday是17日,则每周五运行并执行:

00 08 * * 5 CURR=$(date) && NEXT_SAR=$(date -d "$CURR 24 hours" +'%d') && NEXT_SUN=$(date -d "$CURR 48 hours" +'%d') && [[ "$NEXT_SAR" == "17" || "$NEXT_SUN" == "17" ]] && <script to be run> || echo 'Do not run'

我希望这有帮助!

答案 1 :(得分:0)

@TuanBA&amp; @Christian Pekeler感谢你们的建议。

我设法让下面的工作。请建议是否有更好的方法可以实现。

如果15日或16日是星期五或17日是工作日,则此脚本将运行,如果与任何日期不匹配,则将退出。我将使用cron安排它在16日和17日运行。

#!/bin/bash


dom=`(date +%d)`
dow=`(date +%u)`


if [ $dom -eq 15 ] && [ $dow -eq 5 ]
then
bin/sh /This/is/thepath/tothescript/test.sh

elif
[ $dom -eq 16 ] && [ $dow -eq 5 ]
then
bin/sh /This/is/thepath/tothescript/test.sh

elif

[ $dom -eq 17 ] && [ $dow -le 5 ]
then
bin/sh /This/is/thepath/tothescript/test.sh

else

exit

fi