安排可取消脚本在持续时间后运行

安排可取消脚本在持续时间后运行

我希望能够在经过一定时间后运行脚本。我还希望能够取消并重新安排它,即动态增加持续时间。

我在想这样的事情 ->

stop_prev_instance.sh; sleep 60 && /etc/init.d/myscript reload

我的问题是我需要stop_prev_instance.sh仅在上一次运行正在sleep运行时停止它,而不是在/etc/init.d/myscript reload命令正在运行时停止。

解决这个问题的正确方法是什么?

答案1

也许使用lockfile(来自 procmail 项目)这样的“取消并重新加载”脚本。

#!/bin/bash

SLEEP=$1
LOCKFILE="/tmp/reload.lock"
MYPID=$$
MYNAME=$(basename "$0")

lockfile "$LOCKFILE"
# kill all other scripts with the same name
KILLPIDS=$(pgrep "^${MYNAME:0:12}" | grep -v "^$MYPID\$")
kill $KILLPIDS 2>/dev/null
rm -f "$LOCKFILE"

sleep "$SLEEP"

lockfile "$LOCKFILE"
/etc/init.d/myscript reload
rm -f "$LOCKFILE"

最多脚本将在lockfilerm命令之间执行。

请注意,该reload-lock文件最好放置在只有一个用户具有写入权限的位置(不是/tmp!)。

相关内容