我正在尝试在远程服务器上安排作业。我希望这个作业被安排在当前服务器时间的一分钟或最后一个计划作业的服务器时间的一分钟,以便在服务器上运行。这样,没有两个作业同时运行(因此避免了竞争条件)。
作业调度是通过at
远程(linux)服务器上的命令完成的。我被迫使用at
,因为我在连接到同一服务器的多个主机上运行一堆复杂的模拟以请求下一个模拟(为简洁起见,我的问题中省略了这部分)。
我在尝试将作业安排在最后一次安排的作业之后的一分钟(如果没有安排的作业,则从现在起一分钟)运行时遇到了问题。我的调度程序脚本当前如下所示:
minute=`atq | sort -t" " -k1 -nr | head -n1 | cut -d' ' -f4 | cut -d":" -f1,2`
curr=`date | cut -d' ' -f4 | cut -d':' -f1,2`
# the 'python -c" prints the correct scheduling time to stdout
cat <<EOF | at `python -c "import sys; hour,minute=map(int,max(sys.argv[1:]).split(':')); minute += 1; hour, minute = [(hour,minute), ((hour+1)%24,(minute+2)%60)][minute>=60]; print '%d:%02d'%(hour, minute)" "$minute" "$curr"`
python path/to/somescript "$1"
EOF
但是,使用此脚本,我收到以下错误:
somescript: 8: EOF: not found
但是,如果我按如下方式对时间进行硬编码,该错误就会消失,并且调度会按预期进行:
minute=`atq | sort -t" " -k1 -nr | head -n1 | cut -d' ' -f4 | cut -d":" -f1,2`
curr=`date | cut -d' ' -f4 | cut -d':' -f1,2`
cat <<EOF | at 16:48 # or whatever other time
python path/to/somescript "$1"
EOF
我将不胜感激有关如何解决此错误的任何帮助,因为此错误导致我的整个设置变得疯狂。
谢谢