У меня есть (довольно простое) консольное приложение Windows, которое я хочу запустить на сервере Linux с помощью Wine. Когда я просто запускаю его с терминала через SSH, например
wine myapp.exe
все отлично работает. Он работает нормально, делает все, что должен, и загрузка процессора довольно низкая (около 5%).
Проблемы начинаются, когда я пытаюсь запустить его в фоновом режиме. Даже такие простые вещи, как
nohup wine myapp.exe
приводит к резкому увеличению загрузки ЦП до 100% (одно полное ядро). Перенаправление вывода в / dev / null и т. Д. Не помогает.
Я пробовал запустить его с помощью выскочки со следующими настройками:
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec sudo -H -u myuser wine /path/to/my/app.exe &> /dev/null
Загрузка процессора составила 100%. Я пробовал еще несколько вариантов, пока не обнаружил, что следующая версия (с использованием wineconsole вместо wine и переключателем "-b", добавленным в sudo) работает нормально (загрузка процессора 5-7%):
exec sudo -b -H -u myuser wineconsole /path/to/my/app.exe
Проблема в том, что если я запустил его так, выскочка не отслеживает pid, поэтому респаун и т. Д. Не работает. Когда я добавляю в конфигурацию "expect-fork", загрузка ЦП снова возрастает до 100%. Когда я добавляю перенаправление в / dev / null, загрузка ЦП возрастает до 100%. Практически все, что я делаю, приводит к увеличению загрузки процессора до 100%.
Есть ли у вас идеи, что может вызвать такой эффект?
Наконец нашел источник проблемы и решение (хотя решение определенно не идеальное).
На самом деле проблема вызвана перенаправлением ввода. Когда ввод с клавиатуры заменяется / dev / null, что-то внутри wine или программы (я не исследовал это), по-видимому, переходит в быстро работающий бесконечный цикл, который вызывает высокую загрузку процессора.
Решение, которое я нашел, - добавить «владельца консоли» в конфигурацию Upstart, чтобы он подключал процесс к консоли. После этого я даже смог правильно перенаправить вывод :)
Поскольку программа работает на выделенном сервере в центре обработки данных, этот параметр не вызывает никаких проблем.
Я была такая же проблема. Решение для меня: сначала запустить экран Xvfb, а затем экспортировать команду DISPLAY =: 1.0 && wineconsole