有時候我們會需要定時執行一個指令碼,那麼可以用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
就可以每個工作日執行了。