Вопрос или проблема
Баш-скрипт для запуска/остановки ComfyUI
Я пытаюсь создать bash-скрипт и ярлык .desktop, которые будут переключать (запускать и останавливать) сервер ComfyUI. Вот мой текущий рабочий bash-скрипт для запуска сервера ComfyUI:
#!/bin/bash
# активировать виртуальное окружение
source ./AI/ComfyUI/venv/bin/activate
# запустить ComfyUI
python3 ./AI/ComfyUI/main.py
Опираясь на некоторые подсказки из этого вопроса, Как проверить с помощью Bash-скрипта, работает ли приложение?
- как мне заменить ввод bash, используемый в этом скрипте, на простую жестко заданную команду для python-скрипта? Верен ли приведенный ниже вариант?
- поскольку используется 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
Замечания
-
Пути: Убедитесь, что вы заменили
/absolute/path/to/
на фактический путь до вашего проекта ComfyUI и иконок. -
Иконки: Замените
/path/to/icon-inactive.png
и/path/to/icon-active.png
на фактические пути к вашим иконкам. - Разрешения: Не забудьте сделать скрипт исполняемым:
chmod +x /absolute/path/to/toggle_comfyui.sh
Заключение
Теперь вы сможете запускать и останавливать сервер ComfyUI с помощью созданного вами Bash-скрипта, при этом иконка в ярлыке будет меняться в зависимости от состояния сервера. Если у вас есть дополнительные вопросы или вам нужна помощь, не стесняйтесь обращаться!