Ошибка: "SystemException:XOpenDisplay failed" при попытке запустить приложение Avalonia из Crontab в Linux
У меня есть приложение Avalonia на плате Linux Debian UP, которое я могу запустить с помощью следующей команды из терминала:
sudo dotnet /home/user/myapp/myapp.dll
Я написал следующий скрипт keepalive.sh, чтобы проверить, запущено ли приложение, и запустить его, если это не так:
#!/bin/bash
if ! ps aux | pgrep -fx -l "dotnet /home/user/myapp/myapp.dll" > /dev/null
then
sudo dotnet /home/user/myapp/myapp.dll
fi
Когда я запускаю это с терминала, он открывает приложение в порядке.
Затем я отредактировал файл crontab, добавив следующую строку:
*/1 * * * * sudo bash /home/user/keepalive.sh >> /tmp/keepalive.log 2>&1
Вывод в файле журнала:
Unhandled Exception: System.Exception: XOpenDisplay failed
at Avalonia.X11.AvaloniaX11Platform.Initialize(X11PlatformOptions options)
at Avalonia.Controls.AppBuilderBase`1.Setup()
at Avalonia.Controls.AppBuilderBase`1.Start[TMainWindow](Func`1 dataContextProvider)
at MyApp.Program.Main(String[] args) in C:\src\VSO\MyApp\src\MyApp\Program.cs:line 24
/home/user/keepalive.sh: line 4: 19313 Aborted sudo dotnet /home/user/myapp.dll
Я попытался явно настроить отображение в crontab и keepalive.sh, добавив следующее:
XAUTHORITY=/home/user/.Xauthority -or-
XAUTHORITY=${HOME}/.Xauthority -or-
XAUTHORITY=~/.Xauthority
Я также могу открыть Firefox из crontab, так что уверен, что это не проблема X-сессии или DISPLAY.
Другие вещи, которые я пробовал, включают:
Установка
PATH
переменная в crontabИспользование абсолютных путей для всего
Убедитесь, что у root есть разрешения на keepalive.sh
Используемый
sudo openvt <followed by my script>
Обновлен пакет NuGet Avalonia до 0.9.3 (сейчас 0.8.0)
Обновлен файл /etc/sudoers, чтобы разрешить полный доступ для команд root и sudo.
Я не уверен, что мне нужно сделать, чтобы это работало, и я не уверен, что это проблема Linux или Avalonia. Благодарим за любые дальнейшие предложения.