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



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

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

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

array24 = 1:00,2:00,3:00 to 00:00
while [[ ! -f /home/22/job_stop.txt ]]
do
  #TIME=`date +%H%M|bc`
  currentHour=date '+%H:00'
    for loop array24 
    if  [$currentHour -eq $array24 ] || 
    then
            /folder/1/script.sh
    fi
    end for
  sleep 900
done
exit

下面是一个示例:

#!/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 执行。

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)

相关内容

最新更新