shell 脚本并发线程

chenzunxiong 2018-01-22 10:41:45
背景:
在linux 环境下两个挂载,/dev/sda1 挂载到 /root, /dev/sda2 挂载到 /home
脚本需求:
从/home 目录拷贝一个文件到 /root, 在拷贝的过程中,检测 /root 的磁盘可用百分比是否大于80%,大于的话。把前面的拷贝进程关闭掉。


个人想法: while (a == 1)do 复制,复制的时候判断 /root可用百分比是否大于80%,是的话 a=1 ,不是的话a=0 ,当a =0 时 a == 1 = false 退出命令。
引用
checkdisk(){
percent=$(df -H | grep '/dev/sda2' | awk '{ print $5 " " $1 }' | awk '{ print $1}' | cut -d'%' -f1)
max=80
echo $percent
if [ $percent -ge $max ]
then
result=1
else
result=0
fi
echo $result
}

while [ $result == 0]
do
cp -v /home/123.log /root/123.log
checkdisk
done
echo "export done"



可是感觉while 里面有错误。程序依次进行下来的。会把cp 动作做完。再去调用checkdisk,这样就达不到我要边cp 边 checkdisk 的效果
...全文
609 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzunxiong 2018-01-24
  • 打赏
  • 举报
回复
引用 5 楼 ckc 的回复:
那就写2个脚本吧, 一个主脚本执行备份等工作,开始做之前在后台启动一个检查脚本 检查脚本固定时间间隔执行,执行的时候看下可用空间情况,如果发现有问题,就killall掉那个备份命令 不过忍不住还想说几句,就算是备份检查大小有误差,也完全可以用放一些余量的办法来解决,不应该设计这么复杂的备份流程 把数据从/home迁移到/root的过程也很奇怪 备份工作优先级低在空间不够的时候中止也很奇怪,备份空间都没有了,难道不应该赶快加空间吗?
空间一满的话。里面运行的客户进程可能就会有问题。因为没空间写入日志文件,所以空间问题占首要。最后还是谢谢你的意见
ckc 2018-01-24
  • 打赏
  • 举报
回复
那就写2个脚本吧, 一个主脚本执行备份等工作,开始做之前在后台启动一个检查脚本 检查脚本固定时间间隔执行,执行的时候看下可用空间情况,如果发现有问题,就killall掉那个备份命令 不过忍不住还想说几句,就算是备份检查大小有误差,也完全可以用放一些余量的办法来解决,不应该设计这么复杂的备份流程 把数据从/home迁移到/root的过程也很奇怪 备份工作优先级低在空间不够的时候中止也很奇怪,备份空间都没有了,难道不应该赶快加空间吗?
chenzunxiong 2018-01-23
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
你这个要求用shell脚本不容易实现的 用python脚本甚至用c写都更靠谱一些吧 另外思路应该也不是这样处理,为什么要一边拷贝一边判断?完全可以在拷贝之前根据总空间、剩余空间、文件大小 来判断是不是应该拷贝。
嗯。非常感谢你的解答。你说的话。如果是拷贝的话可以在拷贝之前根据总空间、剩余空间、文件大小。一边执行一个进程一边判断。是因为别人的真正需求不是拷贝。是导出pgsql 的DB dump,在DB上查过那个要导出的database 大小,比导出来时的文件大小更大一点。所以防止意外发生。要求一边拷贝一边判断
ckc 2018-01-23
  • 打赏
  • 举报
回复
你这个要求用shell脚本不容易实现的 用python脚本甚至用c写都更靠谱一些吧 另外思路应该也不是这样处理,为什么要一边拷贝一边判断?完全可以在拷贝之前根据总空间、剩余空间、文件大小 来判断是不是应该拷贝。
chenzunxiong 2018-01-23
  • 打赏
  • 举报
回复
引用 3 楼 qq_36751214 的回复:
shell是可以实现这个结果的,cp -v /home/123.log /root/123.log 改为cp -v /home/123.log /root/123.log & 在后台单启动一个进程,就能达到效果。请勿忘记给分。哈哈
兄弟。你这个可以两个都在后台运行,可以后面的程序,查硬盘大小,能实现达到80% 去终止前面的cp 进程吗?
金秋枣香 2018-01-23
  • 打赏
  • 举报
回复
shell是可以实现这个结果的,cp -v /home/123.log /root/123.log 改为cp -v /home/123.log /root/123.log & 在后台单启动一个进程,就能达到效果。请勿忘记给分。哈哈

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧