我们没有权限在我们的环境中使用 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)