скрипт для перезапуска процесса в Debian WSL

скрипт для перезапуска процесса в Debian WSL

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

Связанный контент