c++ - 无法使用 bash 脚本正确重启应用程序

标签 c++ linux bash ubuntu

这是一个让我抓狂的问题。首先,我不是 Linux 专家,所以我可能只是遗漏了一些细节。
我正在尝试使用 shell 脚本重新启动应用程序(即 rpi-webrtc-streamer,但这无关紧要)。原因是当配置更改发生时,我需要更新配置文件并重新启动。
想法是使用 system() 调用 bash 脚本。函数并传入pid的当前进程。然后脚本应该使用提供的 pid 终止进程。 ,然后再次执行。理论上这应该不是问题...
可能更复杂的是该进程需要使用 sudo 运行。 .不知道是不是这样,但只是想我应该提一下。
现在这是脚本:

#!/bin/bash
echo "restarting streamer..."
echo "killing process with PID $1"
kill $1
# I have tried different intervals, even 10 seconds, doesn't help
sleep 2
echo "running new streamer instance"
echo "path:"
pwd
#printenv
echo "id -u"
# just to verify the script runs with sudo
id -u
./webrtc-streamer --verbose
echo "done"
问题是应用程序失败并出现以下错误:
(direct_socket.cc:77): Failed to listen 0.0.0.0:8888.
...然后它关闭了。那么显然它无法打开端口。它几乎看起来好像应用程序的前一个实例仍然保持端口打开。但是,我尝试调整脚本中的 sleep 秒数,但这应该不是问题,首先我认为脚本将在进程实际被杀死后继续执行,然后进程立即关闭,我可以从日志。
但是,如果我在脚本从最初实际执行初始应用程序的 shell 失败后立即运行该应用程序,它运行时没有任何问题(能够打开端口)。不管它之前在 sleep 中等待了多少秒。
我唯一想到的另一件事是 bash 脚本可能使用不同的环境变量运行。我试图打印那些,但我没有看到任何重要的东西。
我还验证了该应用程序不会更改工作目录,但这应该不是问题,因为它实际上是启动的。然后它在无法打开端口后退出。
我还尝试添加 sudo在脚本中的应用程序执行之前(这不应该是必要的 AFAIK)。没什么区别。
有任何想法吗?

最佳答案

正如 jordanm 在评论中所建议的,我通过使用 systemd 解决了这个问题。

关于c++ - 无法使用 bash 脚本正确重启应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68749126/

相关文章:

git - 为什么 `git diff ` 自动完成到分支而不是文件

java - 使用Java程序填写Git凭证

c++ - C++ 中的 LNK2019 链接错误

c++ - 如何监视 C++ 中文件的目录?

java - java或c++中的邻接矩阵来查找连接的节点

C:故障?:排序功能不适用于 LINUX (RHEL 6.6),但适用于 MAC OS X (10.3)

linux - 我如何编译 mips gnu?

linux - 如何在二进制模式下使用 wget 下载 - linux

regex - Linux 用包含双引号的变量替换

c++ - 在 C++ 中,您通常在哪里声明和定义类外的函数?