在 Debian WSL 上重新启动进程的脚本

在 Debian WSL 上重新启动进程的脚本

我在 Debian 11 WSL 上安装了 amule-daemon。进程 amuleweb 时不时崩溃,所以我需要重新启动它。

我正在尝试使用以下 bash 脚本自动执行此操作:

#!/bin/bash

if [[ $(pgrep amuleweb) ]]; then
   echo "amuleweb is running..";
else
   echo "amuleweb is not running, restarting now..";
   amuleweb --amule-config-file=/home/debian/.aMule/amule.conf
fi

但无论 amuleweb 是否正在运行(我使用“ps aux | grep amule”进行检查),脚本始终返回“amuleweb 正在运行..”

这是 amuleweb 停止的示例。

debian@CUSPIDE:~$ ./amuleweb.sh
amuleweb is running..
debian@CUSPIDE:~$ [[ $(pgrep amuleweb) ]]
debian@CUSPIDE:~$ echo $?
1

如果我直接从终端运行 pgrep 命令,它可以工作,但在我的脚本中它总是返回“0”。

我该如何解决?谢谢

答案1

在这里,我猜测一下,您的脚本名称可能包含字符串amuleweb。如果是这种情况,那么pgrep就是找到正在运行的脚本。这里的最佳做法是使用pgrep -f(或-x,正如@TomYan在评论中指出的那样)形式来确保您匹配所需的可执行文件。

对于这种情况(重新启动失败的服务),您可能还会考虑使用进程管理器,而不是自己动手。虽然 WSL 现在包含使用 Systemd 的功能,但除非您已经出于其他原因启用了它,否则这可能有点过头了。请查看主管作为一个相当轻量级、易于配置的进程管理器,可以重新启动失败的服务。

相关内容