长时间运行 shell 脚本后发出警报

长时间运行 shell 脚本后发出警报

当我等待慢速命令(例如对大型数据库的操作)时,我开始做其他事情,并且经常很长时间都没有注意到它已经完成,浪费了宝贵的时间。我正在寻找一种方法,让 shell 在运行超过 X 秒的命令完成时提醒我(我的意思是,运行一些我可以确定的自定义命令),然后我得到了提示。

我正在使用 Bash,但其他 shell 的解决方案也很有趣。

答案1

如果将此脚本放入您的 中.bashrc,则在长时间执行命令后返回提示时,它将执行您喜欢的任何命令 - 自定义“长时间”( 之后-gt)以秒为单位,并且在同一行的花括号内,您可以执行任何您喜欢的命令。您甚至可以向自己发送一封电子邮件,其中包含发生这种情况的主机以及最后执行的命令及其状态代码。

如果时间过去很久,则发出蜂鸣声()
    LAST_COMMAND_DURATION=$(($(日期 +%s) - ${LAST_COMMAND_TIME}))
    [[ ${LAST_COMMAND_DURATION} -gt 60 ]] && { echo "花了很长时间,不是吗?" ; notify-send "我在 ${LAST_COMMAND_DURATION} 秒后完成了!"; }
    导出 LAST_COMMAND_TIME=
}

导出 PROMPT_COMMAND=beep_if_long_time_past
陷阱'[-z ${LAST_COMMAND_TIME}]&&导出LAST_COMMAND_TIME = $(date +%s)'DEBUG

答案2

slowcommand; echo -e "\a"

虽然可行,但每次手动添加通知命令既不美观又不方便,而且容易忘记。(可以使用wait以下命令将通知添加到已经运行的进程:这个答案解释,但那就更丑了。)

答案3

我通常使用弹出通知,xmessage通常可用:

slowcommand; xmessage -center 'Job done!'

或者添加提醒(取决于atd守护进程):

echo 'xmessage -display :0 -center "Check on job"' | at 'now + 10 minutes'

相关内容