linux下运行脚本时出现killed怎么解决

linux下运行脚本时出现killed怎么解决,第1张

原因是由于内存溢出导致的:当linux出现killed进程的时候,意味着整个系统的内存已经不足,如果不杀死进程的话,就会导致系统的崩溃。解决办法:1.增加系统内存,2.是优化进程,使其占用内存降低。3.是可以使用oom_score_adj参数,这个参数会被计算入oom_score,可以避免进程被杀死(不推荐使用)。

大前提,你用的是bash,其他shell应该也有类似的任务管理功能,具体你自己去查。

简单说一下思路,假定你那个有 flock 的脚本叫 a.sh, 你不要直接在crontab中调用 a.sh,而是调用另外一个脚本,比如 main.sh,main.sh 应该长成这个样子

#!/bin/bash

# 启动 a.sh

/path/to/a.sh &  

# 每秒钟检查一下 a.sh 是否结束,如果结束,则退出当前进程,如果10秒钟后a.sh仍未结束,则kill掉它

for (( x=0 x<10 x++ )) do

  sleep 1

  # 检查a.sh 任务是否存在

  jobs %1 2>/dev/null

  if [ $? -ne 0 ] then

      # a.sh 已经结束

      exit 0

  fi

done

# 超时,kill 掉 a.sh  

kill -9 %1

如上面的注释,main.sh 后台启动 a.sh 后,在10秒内不断的检查这个任务是否还在运行,如果不在了,那说明 a.sh 已经结束了,那 main.sh 也可以结束。如果超时,则强行杀掉 a.sh。

[]与test是用于判定【表达式】的真假,而非可执行的shell命令。在这里,mv作为一个shell的命令会返回标志位,如果成功为如果成功则返回真(0),反之则返回假(非0),所以可以用if来判定是否执行成功。

!在这里是表示取反,意思是如果执行成功(!0=非0),就跳过,否则执行if与fi内的语句。因为有exit,所以一旦执行有问题则可以不再执行后续的脚本。

不仅是mv,其他的shell可执行命令都可以用if来判定执行结果,比如:

#使用!与chown

if ! chown root ./testfile then

echo $?

echo "can not change owner to root"

fi

#没有使用!与chmod

if chmod 777 ./testfile then

echo $?

echo "chmod success"

fi


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7320260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存