[英]Run Function Every "X" hours for "X" Seconds over 24 hours
我需要制作一個系統,用戶可以在其中設置一個計時器,該計時器在 24 小時內每 x 小時關閉一次,持續 x 分鍾(理想情況下從 0600 開始或至少在實際時間的 00 秒開始)
下面是我正在嘗試執行的代碼示例,問題是當它到達 00:00(午夜)時,它又回到了沒有准備好的狀態。
import time
import argparse
from datetime import datetime
def main(start_time_hour, start_time_minute, watering_duration,
watering_interval_hour, watering_interval_minute):
# Watering loop, each cycle consists one application of water per watering
cycle.
while True:
# Sleep until start time is reached. Resets every 24 hours.
current_time = datetime.now()
while current_time.hour < start_time_hour: # This loop will only break after start hour is reached,
time.sleep(1) # at which point it will only pass for remainder of 24h
current_time = datetime.now()
print('Not Ready - Hour')
while current_time.minute < start_time_minute: # This loop will only break after start minute is reached,
time.sleep(1) # at which point the watering routine will execute for
current_time = datetime.now() # the remainder of the 24 hour period
print('Not Ready - minute')
while current_time.hour <= start_time_hour and current_time.minute < start_time_minute: # This loop will only break after start hour is reached,
time.sleep(1) # at which point it will only pass for remainder of 24h
current_time = datetime.now()
print('Not Ready - minute')
# Commence watering loop
print("call function to turn sprinkler valve relay ON here")
print('On time:', datetime.now().time().strftime('%H:%M:%S'))
time.sleep(watering_duration)
print("call function to turn sprinkler valve relay OFF here")
print('Off time:', datetime.now().time().strftime('%H:%M:%S'))
time.sleep(watering_interval_hour * 3600 + watering_interval_minute * 60 - watering_duration)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Watering timer code. Takes user input args and prints events to stdout")
parser.add_argument('start_time', metavar='start_time %s', help='start time in HHMM format with leading zeroes')
parser.add_argument('watering_duration', metavar='watering_duration %s', help='watering duration in seconds')
parser.add_argument('watering_interval', metavar='watering_interval %s', help='watering interval in HHMM format with leading zeroes')
args = parser.parse_args()
main(int(args.start_time[0:2]), int(args.start_time[2:4]), int(args.watering_duration),
int(args.watering_interval[0:2]), int(args.watering_interval[2:4]))
提前致謝!
Linux crontab是自動調度程序作業的不錯選擇。 crontab 是您希望定期運行的命令列表,以及將在固定時間間隔內執行的用戶定義的函數/程序。
用法:
MIN HOUR DOM MON DOW CMD
* * * * * /usr/local/bin/action-trigger.sh
MIN : 分鍾字段 0 到 59
HOUR : 小時字段 0 到 23
DOM : 月 1-31 日
MON : 月份字段 1-12
DOW : 星期幾 0-6
CMD : Command 要執行的任何命令
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.