下面是我在 bash 中执行的脚本。而且效果很好。
fileexist=0
for i in $( ls /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done); do
mv /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done /data/read-only/clv/daily/archieve-wip/
fileexist=1
done
问题陈述:-
在我必须使用cron 作业
每天运行的上述 shell 脚本中,我没有任何错误/异常处理机制
。假设如果出现任何问题,那么我不知道发生了什么?
因为在上面的脚本执行之后,还有一些其他的脚本会依赖上面脚本提供的数据
,所以我总是会收到依赖我脚本的其他人的提示发生错误的数据。
那么有什么方法可以让我在我的脚本发生任何错误时得到通知
?假设如果 集群正在进行一些维护
并且那时我正在运行我的脚本,那么它肯定会失败,所以如果我的上述脚本失败了,我可以得到通知,这样我就可以肯定出了什么问题。
希望我的问题足够清楚。
任何想法将不胜感激。
最佳答案
正如 freetx 回答的那样,您可以检查每个命令的退出状态,但这是手动错误检查而不是异常处理。在 sh
中获得等效异常处理的标准方法是使用 set -e
启动脚本。这告诉 sh
在任何执行的命令失败时立即以非零状态退出(即以非零退出状态退出)。
如果打算让此类脚本中的某些命令(可能)失败,您可以使用结构 COMMAND || true
,这将强制该表达式的退出状态为零。例如:
#!/bin/sh
# if any of the following fails, the script fails
set -e
mkdir -p destdir/1/2
mv foo destdir/1/2
touch /done || true # allowed to fail
另一种确保在 cron 调用的脚本出现问题时通知您的方法是遵守 Unix 约定 printing nothing unless an error ocurred .成功的运行将在没有通知的情况下通过,不成功的运行将导致 cron 守护程序通过电子邮件通知您错误。请注意,必须在您的系统上正确配置本地邮件递送才能使其正常工作。
关于linux - 如何处理 shell 脚本中的错误/异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12335356/