Выполнение бесконечного цикла на запуске

Ответ в 2 словах: местоположение Xserver для GDM трудно кодируется во время компиляции в configure.ac, строка 1199 в переменной X_SERVER и не может быть настроено. Так, можете быть Вы, мог играть с символьными ссылками, связываясь /usr/bin/Xorg (или, менее вероятно /usr/bin/X, посмотрите это) к Вашей сборке Xserver.

Подробнее:

У меня есть Debian 7, также и вот мое дерево процесса:

 |-gdm3-+-gdm-simple-slav-+-Xorg
 |      |                 |-gdm-session-wor-+-gnome-session-+-bluetooth-apple---{bluetooth-apple}
 |      |                 |                 |               |-evolution-alarm---2*[{evolution-alarm}]
 |      |                 |                 |               |-gdu-notificatio
 |      |                 |                 |               |-gnome-fallback----2*[{gnome-fallback-}]
 |      |                 |                 |               |-gnome-panel-+-gnome-terminal-+-bash
 |      |                 |                 |               |             |                |-bash---vi
 |      |                 |                 |               |             |                |-bash-+-less
 |      |                 |                 |               |             |                |      `-pstree
 |      |                 |                 |               |             |                |-gnome-pty-helpe
 |      |                 |                 |               |             |                `-3*[{gnome-terminal}]
 |      |                 |                 |               |             |-iceweasel-+-plugin-containe-+-4*[gtk-gnash]
 |      |                 |                 |               |             |           |                 `-{plugin-containe}
 |      |                 |                 |               |             |           `-31*[{iceweasel}]
 |      |                 |                 |               |             |-pidgin
 |      |                 |                 |               |             `-3*[{gnome-panel}]
 |      |                 |                 |               |-gnome-screensav---2*[{gnome-screensav}]
 |      |                 |                 |               |-gnome-settings----2*[{gnome-settings-}]
 |      |                 |                 |               |-gnome-sound-app---{gnome-sound-app}
 |      |                 |                 |               |-metacity---3*[{metacity}]
 |      |                 |                 |               |-nm-applet---{nm-applet}
 |      |                 |                 |               |-notification-da---{notification-da}
 |      |                 |                 |               |-polkit-gnome-au---{polkit-gnome-au}
 |      |                 |                 |               |-ssh-agent
 |      |                 |                 |               |-tracker-miner-f---2*[{tracker-miner-f}]
 |      |                 |                 |               |-tracker-store---6*[{tracker-store}]
 |      |                 |                 |               `-3*[{gnome-session}]
 |      |                 |                 `-2*[{gdm-session-wor}]
 |      |                 `-{gdm-simple-slav}
 |      `-{gdm3}

Так, Xorg запускается через gdm-simple-slave. Definitly, /etc/gdm/Init/Default не имеет никакого отношения к стартовому Xserver, как он был сказан здесь и здесь.

Были некоторые признаки, которые невозможно настроить, как X запускается с gdm.

Я решил пойти для исходных кодов, которые вполне прилично структурированы. Так:

Перейдите к исходным кодам, существует папка демона, которая содержит файл ВНУТРЕННОСТЕЙ, объясняя структуру кода.

Там можно читать:

** GdmServer

Класс, используемый ведомым устройством, которое справляется с выполнением локального X-сервера.

Так, файл, в котором мы нуждаемся, является https://git.gnome.org/browse/gdm/tree/daemon/gdm-server.c

Существует несколько вложенных функций, ответственных за вызов X-сервера и создание его параметров командной строки.

Функция, непосредственно ответственная за выполнение процесса X-сервера, является gdm_server_spawn, который порождает X в строке 694 с g_spawn_async_with_pipes glib.

Так, мы должны узнать, как argv формируется. Ну, в 2 словах это - строка 293, и нам нужно значение макроса X_SERVER (если Вы не используете systemd Redhat вместо sysVinit, но Вы не :)).

Увы, этот макрос по-видимому формируется в configure.ac, строка 1199 и трудно кодируется. Так, кажется, что наилучший вариант состоит в том, чтобы поместить символьную ссылку на Вашу сборку Xserver к одному из тех местоположений.

3
21.03.2015, 20:32
2 ответа

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

Запустите команду Crontab -e и добавьте эту одну строку в нижнюю часть файла:

*/10 * * * * /path/to/my-command-here

Убедитесь, что My-Command - здесь - это исполняемый скрипт ( chmod u + x my-command - здесь ) И что его первая строка начинается с #! И название интерпретатора скрипта (обычно #! / Bin / Bash ).

Каждая запись в шаблоне * / 10 * * * * Карты до минуты (0-59), час (0-23), день (1-31), месяц (1-12 ), а день недели (0-6, с 0 = воскресенье).

8
27.01.2020, 21:09

Могу ли я поместить это в /etc/init.d/rc.local или я должен поместить это в /etc/rc.local или куда-нибудь еще полностью?

Если вы поместите это в rc.local, вы должны поместить это в подоболочку и вилку, которая находится в фоновом режиме. Последняя строка rc.local должна быть выходом 0, и она не должна блокировать, т.е. любые действия на переднем плане должны быть краткими.

(while true
    do my-command-here
    sleep 600
done) &

( ) помещает его в подоболочку, а и - в фоновое пространство.

Если у вас возникла проблема, проверьте этот вопрос-ответ об отладке rc.local.

4
27.01.2020, 21:09

Теги

Похожие вопросы