【发布时间】:2017-07-24 10:26:28
【问题描述】:
我有一个 bash shell 脚本,它应该:
1) 检查文件是否存在
2) 如果文件存在退出脚本,否则创建文件
3) 启动进程
4) 检查过程是否正确运行 - 并将结果发送到日志文件
5) 删除文件
6) 退出脚本
if [ -f $PROPERTIES_HC ]
then
# lockfile/propertiesfile exists so exit the script
log --------- lockfile exists so operation cancelled at `date` ---------
exit 1
else
# no lockfile/propertiesfile so continue
# create the lockfile/propertiesfile
input="./$PROPERTIES_VAR"
while IFS= read -r line || [ -n "$line" ]; do
eval "echo $line" >> $PROPERTIES_HC
done < $PROPERTIES_VAR
#Run Process
RUN_MY_PROCESS --overridefile $PROPERTIES_HC >> $LOG_FILE
#Check Process Ran Okay
if [ "$?" = "0" ]; then
echo "RAN WITHOUT ERROR" >> $LOG_FILE
else
echo "SOME ERROR!" >> $LOG_FILE
fi
# Remove the lockfile/propertiesfile
rm -rf $PROPERTIES_HC
fi
此脚本似乎运行良好,但最近我遇到了脚本的“RUN_MY_PROCESS”元素失败的情况,并且脚本似乎只是退出而将锁定文件保留在原位。
据我了解,除非我设置了 #!/bin/sh -e 之类的内容,否则无论出现错误,脚本都应该继续运行。我是否误解了 shell 脚本/shell 错误处理的工作原理(我是新手!),还是我的 shell 脚本自己崩溃了 - 因此它没有完成运行?
提前感谢您的帮助。
【问题讨论】:
-
您的脚本因哪个错误而崩溃?
-
此脚本作为每日 cron 作业运行。在日志文件中,我只能看到进程本身已失败(进程已创建将自己的信息发送到日志) - 但是它显然在此之后直接崩溃 - 即它永远不会到达脚本检查的地步进程是否运行正常。
-
你能手动运行这个脚本吗?您也可以使用
set -x来执行此操作并获取每一行执行。 -
我可以 - 但它现在运行良好...失败发生在星期六早上,因此脚本没有在星期天或今天早上运行 - 但我一删除它就运行良好锁定文件并手动重新运行。
-
我想更清楚的问题是 - 查看当前的脚本,您是否希望锁定文件在所有情况下都被删除 - 或者是否有逻辑原因说明为什么它可能无法到达脚本的那部分,除了脚本崩溃。
标签: bash shell error-handling