2

我正在尝试在远程服务器上安排作业。我希望这个作业被安排在当前服务器时间的一分钟或最后一个计划作业的服务器时间的一分钟,以便在服务器上运行。这样,没有两个作业同时运行(因此避免了竞争条件)。

作业调度是通过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

我将不胜感激有关如何解决此错误的任何帮助,因为此错误导致我的整个设置变得疯狂。

谢谢

4

3 回答 3

1

只是一个想法。而不是使用此处的文档,为什么不创建一个临时文件并摆脱 EOF 问题?

或这样做:

echo python path/to/somescript "$1" | 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"`

将摆脱 EOF,也许您可​​以更好地看到错误。

我猜 python 代码在一些奇怪的情况下出现错误,缺少前导零,am/pm,这是我目前看不到的东西。

于 2012-12-18T22:45:42.170 回答
1

而不是cat <<EOF | at ...,尝试at <time> <<EOF。没有理由折磨cat这里。

于 2012-12-18T22:54:03.510 回答
0

这就是我最终实施的:

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
gotime=`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"`

cat <<EOF | at "$gotime"

python path/to/somescript "$1"

EOF

它就像一个魅力

于 2012-12-19T03:05:30.333 回答