zoukankan      html  css  js  c++  java
  • shell 脚本中后台执行命令 &

    最近遇到一个问题,

    执行脚本,脚本调用 一个命令,命令(deamon)是一个守护进程,为了调试,取消了守护进程模式。导致命令后边的其他命令(echo "456")都无法执行。

    deamon -d 是以守护进程模式启动;deamon -x 是以非守护进程模式启动(监控进程,死循环),stdout和stderr 关联到 控制终端。

    脚本是 a.sh

    #!/bin/sh

    echo “123“

    /usr/local/bin/deamon -d & >/dev/null 2>&1

    echo “456”

    执行脚本,输出如下:

    [root@localhost]#./a.sh

    [root@localhost]#123

    [root@localhost]#456

    [root@localhost]# 


    符合我的要求,deamon 在后台运行。deamon后面的命令得到运行。

    现在我打算把deamon 换成 调试模式 ,deamon -x,输出重定向到 /tmp/debug.info文件

    修改a.sh 如下:

    #!/bin/sh

    echo “123“

    /usr/local/bin/deamon -x & >/tmp/debug.info 2>&1

    echo “456”

    执行脚本,输出如下:

    [root@localhost]#./a.sh

    [root@localhost]#123

    [root@localhost]#deamon的输出信息 

    这并不是我想要的,deamon的输出没重定向到debug.info文件,并且deamon后边的命令没执行。

    经过修改a.sh如下,实现了我的目的。

    #!/bin/sh

    echo “123“

    /usr/local/bin/deamon -x  >/tmp/debug.info 2>&1 &

    echo “456”

    执行后结果是

    [root@localhost]#./a.sh

    [root@localhost]#123

    [root@localhost]#456

    [root@localhost]#

    deamon的输出信息重定向到/tmp/debug.info文件中。

     总结如下:

    1.后台符号 &一定要放在整个命令最后。
    2.重定向>,>>一定紧跟着重定向文件
    3.如果是 文件输出 1 stdout,2 stderr 要重定向到别的文件,也是紧跟>,>>符号。
    4.如果想让stderr也跟 stdout一样输出到文件,使用
    /usr/local/bin/cmd >file 2>&1

    同 /usr/local/bin/cmd 1>file 2>&1 是一样的意思

    补充:

    脚本中使用 以下命令关闭0,1,2描述符

    exec 0>&-

    exec 1>&-

    exec 2>&1

  • 相关阅读:
    一个500人使用的后台服务站点优化过程
    关于一个每天请求50W次接口的设计实现过程
    Exception in thread "main" java.lang.NoSuchMethodError: scala.actors.AbstractActor.$init$(Lscala/actors/AbstractActor;)V
    搭建hadoop集群的免密钥登录配置
    Hive入门小结
    Jvm垃圾收集器和垃圾回收算法
    Java内存区域与对象创建过程
    得到直播,宁向东的清华管理学课。
    pandas中merge的使用
    少看别人写的文章,多看优秀的代码
  • 原文地址:https://www.cnblogs.com/blueyunchao0618/p/6079031.html
Copyright © 2011-2022 走看看