shell nohup 后台启动服务后,不执行后边命令问题解决

时间:2024-04-12 09:56:17

创建 start.sh
shell内容为:nohuop 服务启动命令 &

使用go 代码调用并执行 start.sh
shell nohup 后台启动服务后,不执行后边命令问题解决
问题: shell可执行文件运行后,没有返回,13行后的代码不执行
解决:
修改start.sh 命令内容为
nohup 服务命令 >/dev/null 2>&1&

理解:

1:> 代表重定向到哪里,例如:echo “123” > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 “1>/dev/null”

0表示标准输入
1表示标准输出
2表示标准错误输出

默认为标准输出重定向,与 1> 相同
2>&1 意思是把 标准错误输出 重定向到 标准输出.
&>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中

.>/dev/null

这条命令的作用是将标准输出1重定向到/dev/null中。 /dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。

2>&1

这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。

linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。

扩展:

命令 标准输出 错误输出
/dev/null 2>&1 丢弃 丢弃
2>&1 >/dev/null 丢弃 屏幕

参考:https://blog.csdn.net/zouli415/article/details/80651526