我在 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 的功能,但除非您已经出于其他原因启用了它,否则这可能有点过头了。请查看主管作为一个相当轻量级、易于配置的进程管理器,可以重新启动失败的服务。