只在工作日?qǐng)?zhí)行的腳本
作者:張京
來(lái)源:SegmentFault 思否社區(qū)
有時(shí)候我們會(huì)需要定時(shí)執(zhí)行一個(gè)腳本,那么可以用cronjob來(lái)完成,比如這樣:
10 04 * * * /usr/local/bin/somework.sh
有時(shí)候,只希望這個(gè)腳本在工作日?qǐng)?zhí)行,比如這樣:
10 04 * * 1-5 /usr/local/bin/somework.sh
但是工作日有時(shí)候又不是簡(jiǎn)單的周一到周五,比如趕上個(gè)小長(zhǎng)假什么的,有時(shí)候周六要上班,有時(shí)候周一又不上班,這時(shí)候這樣的設(shè)置就容易亂,那我們?cè)趺丛O(shè)置這個(gè)cronjob才能讓他預(yù)知我們的放假排班計(jì)劃,并做到絲毫不亂呢?
只用cron是不行的,我們需要在腳本里調(diào)取一個(gè)開(kāi)放接口獲知放假安排,然后就可以按計(jì)劃執(zhí)行了。
這個(gè)開(kāi)放接口在這里:
https://github.com/NateScarlet/holiday-cn
我們簡(jiǎn)單寫(xiě)一個(gè)腳本:
#!/usr/local/bin/python
"""每天定時(shí)執(zhí)行腳本"""
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()
# 放入公司規(guī)定的特殊考勤日
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:
# 是否在節(jié)假日倒休表里,如果在倒休表里,按倒休表作息
return not (days_in_list[0]["isOffDay"])
else:
# 按照周一至周五作息
return True if date.weekday() < 5 else False
def main():
"""主函數(shù)"""
if will_work(datetime.datetime(2022, 6, 21, 0, 0, 0, 0)):
print("今天要上班")
else:
print("今天不上班")
if __name__ == '__main__':
main()
賦予它執(zhí)行權(quán)限:
chmod +x somework.py
然后定一下cronjob:
10 04 * * * /usr/local/bin/somework.py
就可以每個(gè)工作日?qǐng)?zhí)行了。
點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開(kāi)更多互動(dòng)和交流,掃描下方”二維碼“或在“公眾號(hào)后臺(tái)“回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~ - END -
評(píng)論
圖片
表情

