我有一个shell脚本,该脚本运行一系列查询和提取文件的命令,我们将此脚本称为 EXTRACT.sh 。我想向自己发送通知(电子邮件),该通知将监视此脚本以通知我该脚本的运行时间是否超过一个小时并继续运行。我应该怎么做呢?
我在想我可以编写另一个循环主脚本的脚本(EXTRACT.sh),但是我想知道是否有任何方法可以将所有当前代码包装在EXTRACT.sh中以执行相同的测量功能运行。谢谢!
答案 0 :(得分:0)
您可以在bash中尝试类似的方法:
function do_the_job() {
sleep 10
# stands for the long task
}
#spawn the job in background
do_the_job&
# check every 3 seconds if the job is still running
while [ "$(jobs -r)x" != "x" ]
do
sleep 3
echo too long: sending email
done
答案 1 :(得分:-1)
您可以安装一个昏昏欲睡的后台作业,该作业将在退出时终止。
将以下内容另存为test.sh
:
#!/bin/bash
notification() {
echo notification!
}
( sleep 5; trap - EXIT; notification ) &
trap "kill $! 2>/dev/null ||:" EXIT
echo Working.....
sleep $1
echo Done working!
在快速工作中,背景被杀死:
$ bash -x ./test.sh 4
+ trap 'kill 10960 2>/dev/null ||:' EXIT
+ echo Working.....
Working.....
+ sleep 4
+ sleep 5
+ echo Done 'working!'
Done working!
+ kill 10960
但是当作业耗时超过5秒钟时,会发出通知:
$ bash -x ./test.sh 6
+ trap 'kill 11088 2>/dev/null ||:' EXIT
+ echo Working.....
Working.....
+ sleep 6
+ sleep 5
+ trap - EXIT
+ notification
+ echo 'notification!'
notification!
+ echo Done 'working!'
Done working!
+ kill 11088
+ :