简体   繁体   English

在 24 小时内每“X”小时运行一次函数“X”秒

[英]Run Function Every "X" hours for "X" Seconds over 24 hours

I need to make a system where the user can set a timer that goes off every x hours for x minutes (ideally starting from 0600 or at least on the 00 seconds of the actual time) over 24 hours我需要制作一个系统,用户可以在其中设置一个计时器,该计时器在 24 小时内每 x 小时关闭一次,持续 x 分钟(理想情况下从 0600 开始或至少在实际时间的 00 秒开始)

below is an example of the code i am trying to do, the problem is when it hits 00:00 (midnight) it goes back to being not ready.下面是我正在尝试执行的代码示例,问题是当它到达 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]))

Thanks in Advance!提前致谢!

Linux crontab is a good option for the automated scheduler Job. Linux crontab是自动调度程序作业的不错选择。 The crontab is a list of commands that you want to run on a regular schedule, and also the user-defined functions/program it will be executed within the regular interval of time. crontab 是您希望定期运行的命令列表,以及将在固定时间间隔内执行的用户定义的函数/程序。

Usage:用法:

MIN HOUR DOM MON DOW CMD MIN HOUR DOM MON DOW CMD

* * * * * /usr/local/bin/action-trigger.sh 

MIN : Minute field 0 to 59 MIN : 分钟字段 0 到 59

HOUR : Hour field 0 to 23 HOUR : 小时字段 0 到 23

DOM : Day of Month 1-31 DOM : 月 1-31 日

MON : Month field 1-12 MON : 月份字段 1-12

DOW : Day Of Week 0-6 DOW : 星期几 0-6

CMD : Command Any command to be executed CMD : Command 要执行的任何命令

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM