linux 后台运行脚本的命令,shell 脚本中的命令以“阻塞”模式执行 后台运行命令的方法...

在shell 脚本中执行命令,是以“阻塞”方式执行的,这点类似于 system 系统调用,之前并没有意识到这一点,为此,犯错了。

这是一个监控脚本,功能是检查一个程序(以下记做:daemonp)是否在运行(按“程序名”检测),如果不在,则启动它。代码也很简单,在一个死循环中,grep ps 的结果,如果结果为空,则启动daemonp。脚本是别人写的,循环中有sleep 1命令(其实这个sleep没用)。我臆断为每1s检查一次。事实是:脚本检查到daemonp没有运行,则启动它,这时脚本阻塞在 daemonp 的运行上,直到 daemonp 运行结束(挂掉也算)。如果 daemonp 挂了,则脚本继续执行,然后再次检查到daemonp 不存在,启动,阻塞,······,周而复始。

这个脚本运行很好,但是如果用它监控多个程序,就有问题了(假设还监控daemonq)。假设daemonp 和 daemonq 都没有运行,并假设先检测到 daemonp 没有运行,然后启动,现在脚本阻塞到 daemonp 的调用上,没有可能启动 daemonq 了。

解决办法是把 daemonp 和 daemonq 放到后台运行,没有阻塞了,这时 sleep 1 才有用。脚本每1s检查一次。

把命令放到后台的方式是命令后加“&”,但是如果把命令放到变量中(假设为CMD),用``执行,放到后台的方式是`$CMD` &

分享到:

0

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值