我希望能够在经过一定时间后运行脚本。我还希望能够取消并重新安排它,即动态增加持续时间。
我在想这样的事情 ->
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"
最多一脚本将在lockfile
和rm
命令之间执行。
请注意,该reload-lock
文件最好放置在只有一个用户具有写入权限的位置(不是/tmp
!)。