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 是一样的意思

 

转载于:https://www.cnblogs.com/blueyunchao0618/p/6079031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值