如何在不使用cron且仅使用无限循环的情况下每小时运行sh脚本?

时间:2017-10-24 15:17:23

标签: unix scheduling

我们无权在我们的环境中使用cron和at命令。我想每小时运行一个sh文件。

我正在考虑这段代码,但我不确定这是否是最优雅的方法。请指教。下面是伪代码。

我只是做一个无限循环然后循环遍历24值的数组来表示小时:

****

2 个答案:

答案 0 :(得分:1)

以下是一个例子:

#!/bin/bash

interval=3600
while [[ ! -f /home/22/job_stop.txt ]] ; do
    now=$(date +%s) # timestamp in seconds
    sleep $((interval - now % interval))
    # do something            
done

简单的sleep 3600会导致时间漂移,因为执行的命令需要时间。这计算直到下一个小时的顶部的秒数,并且睡眠时间长。 (如果命令需要一个多小时,它将跳过一次或多次迭代,但下一次迭代将在一小时内完成。)

请注意,这会检查自Unix纪元以来的整数小时。如果您将间隔更改为86400(一天),它将在UTC午夜执行。

答案 1 :(得分:0)

Python是你的朋友!

使用shebang系列,您可以轻松地从shell调用python程序:

#!/usr/bin/env python
import schedule
import time
import subprocess
import os    

def cmd() :
    # Call your command here
    subprocess.call(["/folder/1/script.sh"])

schedule.every(1).hour.do(cmd)

while not os.path.exists("/home/22/job_stop.txt")
    schedule.run_pending()
    time.sleep(1)