
У меня установлен amule-daemon на Debian 11 WSL. Процесс 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, это, вероятно, будет излишним, если только вы уже не включили его по другим причинам. Взгляните наСупервайзеркак довольно легкий и простой в настройке диспетчер процессов, который может перезапускать неисправные службы.