• 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

  • 相关阅读:
    补点基础:Javascript中的类和闭包
    Extjs学习笔记之五——一个小细节renderTo和applyTo的区别
    Extjs学习笔记之八——继承和事件基础
    总结一篇
    再补点基础:Javascript的构造函数和constructor属性
    Extjs学习笔记之六——面版
    Extjs学习笔记之七——布局
    Extjs学习笔记之九——数据模型(上)
    引擎功率与扭矩哪个比较重要
    毕业三年,同学基本都辞职了,大部分人看完很有同感~
  • 原文地址:https://www.cnblogs.com/blueyunchao0618/p/6079031.html
Copyright © 2020-2023  润新知