Как отобразить выходной вывод команды XERM в терминале с помощью CRON: пошаговое руководство

Как запустить сценарий с Cron и отобразить результат на экране терминала

В данной статье мы обсудим, как запустить сценарий с помощью Cron и Anacron, а также отобразить его результат в графическом терминале. Мы разберем, как использовать команду для правильного отображения и ответим на некоторые важные вопросы о работе с переменной DISPLAY в Linux.

Проблема запуска сценария

Недавно я столкнулся с проблемой: мне необходимо было запустить сценарий с помощью Cron/Anacron и отобразить его результат на экране терминала. Сначала я пытался использовать команду:

xterm -hold -e 'cd /home/<user>/ && cat inode2 ; bash'

Эта команда работала только в том случае, если я сам запускал сценарий. Однако, чтобы решить проблему, я заменил команду на следующую:

DISPLAY=:0 xterm -hold -e 'cd /home/mmas/ && cat inode2 ; bash'

Теперь активное окно моего ноутбука отображает результат сценария в новом терминале. Это решение не было ясным для меня, и я хотел понять, как оно работает.

Что такое переменная DISPLAY?

Первый вопрос, который у меня возник, это: действительно ли DISPLAY=:0 означает «дисплей текущего активного окна»? На самом деле, это не совсем верно. Эта переменная задает конкретный адрес дисплея с номером :0.

Каждая программа в Linux устанавливает независимое соединение с дисплеем, и они не наследуют информацию о текущем активном окне. Таким образом, DISPLAY=:0 указывает на первый X-сервер в системе, и именно он будет обслуживать запросы на отображение.

Почему нужно указывать DISPLAY в команде?

Второй вопрос связан с тем, почему я должен указывать DISPLAY в начале команды. Дело в том, что нет глобальной установки «текущего дисплея». Каждая сессия запускает свой X-сервер, и любой сервис, работающий вне пользовательской сессии, не знает о текущем дисплее.

Задание Cron запускается вне сеанса пользователя, поэтому система не может унаследовать информацию о дисплее. Это важно понимать, особенно если у вас запущено несколько графических сеансов. Правильное указание DISPLAY позволяет программе корректно обращаться к нужному дисплею.

Упрощение работы с дисплеем

Один из способов обеспечить правильную работу с дисплеем при запуске сценариев — сохранить переменные окружения в файл при входе в систему. Например:

declare -p DISPLAY XAUTHORITY WAYLAND_DISPLAY > ~/.xenv

Затем вы можете загрузить их в задании Cron:

. ~/.xenv && xterm

Эта стратегия позволяет избежать проблем с отсутствием информации о текущем дисплее.

Альтернативный подход с systemd

С принятием SystemD в конце 2010-х годов появилась возможность запускать задания, используя службы пользователя. Это связано с тем, что SystemD теперь может запускать процессы, которые имеют доступ к текущему дисплею. Таким образом, вы можете использовать следующую команду:

systemd-run --user -G /bin/xterm

Этот метод значительно упрощает процесс и позволяет избежать дополнительных манипуляций с переменными окружения.

Заключение

Работа с Cron и отображение вывода сценариев в терминале может быть сложной задачей, особенно в системах с несколькими графическими сессиями. Понимание работы переменной DISPLAY и использование новых возможностей, таких как SystemD, делают этот процесс более управляемым. Если вы столкнулись с подобными проблемами, надеюсь, что эта статья была полезной для вас.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *