微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使在终止信号

如何解决即使在终止信号

即使在中断脚本后,我的状态仍然为零。

一个脚本

#!/bin/bash

## call the backup script
/usr/local/bin/backup 2>&1 >/dev/null
echo $?

备份

#!/bin/bash

exitscript() {
 rm -f $LOCKFILE

 echo "Script Status: $1 | tee -a ${LOG}"
 echo "> End Date: $(date +'%d.%m.%Y %H:%M:%s')" | tee -a ${LOG}
 exit $1
}

######START#######
trap "exitscript 1" 1 2 23 24 25

rsync ${args} ${src} ${dest} | tee -a ${RSYNC_LOG}
retcode=${PIpestATUS[0]}
if [[ ${retcode} -ne 0 ]]; then
  exitcode=1
fi

exitscript ${exitcode:-0}

当第一个脚本运行时,它返回 0 的退出状态,尽管我试图在它结束之前终止备份脚本(为此我创建了一个非常大的文件,以便 rsync 需要时间来复制文件和我在脚本结束之前有时间杀死脚本)

ps -ef | grep -i backup
kill $PID 

另一件事是,即使杀死备份脚本,rsync 仍然运行。一旦脚本被终止,我希望 rsync 停止并且我的第一个脚本返回零状态代码。 非常感谢任何建议。谢谢!

解决方法

我认为 echo "Script Status: $1 | tee -a ${LOG} 中缺少的引号与问题无关。
当你想要一个函数来处理陷阱时,你需要导出那个函数。
当你想杀死孩子时,你应该在你的陷阱功能中添加这些。

我使用 sleep 命令测试了这些调整,它应该也适用于 rsync

#!/bin/bash

exitscript() {
 echo "Script Status: $1"
 (( $pleasekill > 0 )) && kill ${pleasekill}
 echo "> End Date: $(date +'%d.%m.%Y %H:%M:%S')"
 exit $1
}

# Export the function exitscript
export exitscript

######START#######
pleasekill=0
trap "exitscript 1" 1 2 23 24 25
# Start I/O-friendly rsync function
sleep 30 &
pleasekill=$!
wait

exitscript 2

当您使用第一个脚本进行测试时,请使用 ^Ckill -1 pid_of_backup

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?