Баш-скрипт для запуска/остановки ComfyUI

Вопрос или проблема

Баш-скрипт для запуска/остановки ComfyUI

Я пытаюсь создать bash-скрипт и ярлык .desktop, которые будут переключать (запускать и останавливать) сервер ComfyUI. Вот мой текущий рабочий bash-скрипт для запуска сервера ComfyUI:

#!/bin/bash

# активировать виртуальное окружение
source ./AI/ComfyUI/venv/bin/activate

# запустить ComfyUI
python3 ./AI/ComfyUI/main.py

Опираясь на некоторые подсказки из этого вопроса, Как проверить с помощью Bash-скрипта, работает ли приложение?

  1. как мне заменить ввод bash, используемый в этом скрипте, на простую жестко заданную команду для python-скрипта? Верен ли приведенный ниже вариант?
  2. поскольку используется venv, нужно ли делать что-то дополнительное, когда я проверяю экземпляр и затем убиваю его, если он существует?

BASECMD=${1%%\ *}

#это правильно?
PID=$("python3 ./AI/ComfyUI/main.py" "$BASECMD")

if [ "$?" -eq "0" ]; then
   echo "найдена хотя бы одна инстанция "$BASECMD", прекращение всех инстанций"

   # остановить ComfyUI
   kill $PID
else
   echo "не найдены работающие инстанции "$BASECMD", запускаем одну"

   # активировать виртуальное окружение
   source ./AI/ComfyUI/venv/bin/activate

   # запустить ComfyUI
   $1

fi

Последняя (небольшая) деталь, для ярлыка .desktop я указываю на иконку. Если возможно, я хотел бы переключать иконки для состояний запуска/остановки (как на изображении ниже). Возможно ли это с .desktop?

вставьте описание изображения здесь

Это должно сработать для вас. Просто измените пути на соответствующие местоположения.

#!/bin/bash

pid_file="/tmp/comfyui.pid"
script_pid=""

update_icon() {
    if [ -z "$script_pid" ]; then
        # Не работает, используем неактивную иконку
        sed -i 's|^Icon=.*|Icon=/path/to/icon-inactive.png|' ~/.local/share/applications/comfyui.desktop
    else
        # Работает, используем активную иконку
        sed -i 's|^Icon=.*|Icon=/path/to/icon-active.png|' ~/.local/share/applications/comfyui.desktop
    fi
}

source /absolute/path/to/AI/ComfyUI/venv/bin/activate

# Проверяем, существует ли файл, и читаем PID
if [ -f "$pid_file" ]; then
    script_pid=$(cat "$pid_file")
fi

# Проверяем, работает ли процесс
if [ -n "$script_pid" ] && kill -0 "$script_pid" 2>/dev/null; then
    kill "$script_pid"
    wait "$script_pid"
    rm "$pid_file"      # Удалить PID-файл
    script_pid=""       # Очистить PID
else
    # Если не работает, запускаем ComfyUI
    python3 /absolute/path/to/AI/ComfyUI/main.py &
    script_pid=$!
    echo "$script_pid" > "$pid_file"  # Сохранить PID в файл
fi

update_icon

deactivate

exit 0

Файл ~/.local/share/applications/comfyui.desktop:

[Desktop Entry]
Version=1.0
Name=ComfyUI
Exec=bash -c "/absolute/path/to/my_script.sh"
Icon=/path/to/icon-inactive.png
Type=Application
Terminal=false

Затем создайте символическую ссылку для значка на рабочем столе.

ln -s ~/.local/share/applications/comfyui.desktop ~/Desktop/comfyui.desktop

Ответ или решение

Вот решение вашей задачи, которое включает создание Bash-скрипта для управления сервером ComfyUI и соответствующего .desktop ярлыка для операционной системы Linux. Эта информация должна помочь вам легко запускать и останавливать ComfyUI, а также изменять иконку в зависимости от состояния выполнения приложения.

Bash-скрипт для управления ComfyUI

Создайте файл скрипта, например toggle_comfyui.sh, и вставьте следующий код:

#!/bin/bash

# Путь к временной файлу PID
pid_file="/tmp/comfyui.pid"
script_pid=""

update_icon() {
    if [ -z "$script_pid" ]; then
        # Приложение не запущено, использовать иконку неактивного состояния
        sed -i 's|^Icon=.*|Icon=/path/to/icon-inactive.png|' ~/.local/share/applications/comfyui.desktop
    else
        # Приложение запущено, использовать иконку активного состояния
        sed -i 's|^Icon=.*|Icon=/path/to/icon-active.png|' ~/.local/share/applications/comfyui.desktop
    fi
}

# Активировать виртуальное окружение
source /absolute/path/to/AI/ComfyUI/venv/bin/activate

# Проверить, существует ли файл и прочитать PID
if [ -f "$pid_file" ]; then
    script_pid=$(cat "$pid_file")
fi

# Проверить, запущен ли процесс
if [ -n "$script_pid" ] && kill -0 "$script_pid" 2>/dev/null; then
    # Остановить ComfyUI
    kill "$script_pid"
    wait "$script_pid"
    rm "$pid_file"      # Удалить файл PID
    script_pid=""       # Очистить PID
else
    # Если не запущено, запустить ComfyUI
    python3 /absolute/path/to/AI/ComfyUI/main.py &
    script_pid=$!
    echo "$script_pid" > "$pid_file"  # Сохранить PID в файл
fi

update_icon

deactivate

exit 0

Создание .desktop ярлыка

Создайте файл comfyui.desktop в каталоге ~/.local/share/applications/ с следующим содержимым:

[Desktop Entry]
Version=1.0
Name=ComfyUI
Exec=bash -c "/absolute/path/to/toggle_comfyui.sh"
Icon=/path/to/icon-inactive.png
Type=Application
Terminal=false

Создание символической ссылки на рабочем столе

Чтобы добавить ярлык на рабочий стол, создайте символическую ссылку:

ln -s ~/.local/share/applications/comfyui.desktop ~/Desktop/comfyui.desktop

Замечания

  1. Пути: Убедитесь, что вы заменили /absolute/path/to/ на фактический путь до вашего проекта ComfyUI и иконок.

  2. Иконки: Замените /path/to/icon-inactive.png и /path/to/icon-active.png на фактические пути к вашим иконкам.

  3. Разрешения: Не забудьте сделать скрипт исполняемым:
chmod +x /absolute/path/to/toggle_comfyui.sh

Заключение

Теперь вы сможете запускать и останавливать сервер ComfyUI с помощью созданного вами Bash-скрипта, при этом иконка в ярлыке будет меняться в зависимости от состояния сервера. Если у вас есть дополнительные вопросы или вам нужна помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...