Включенная служба пользователя systemd не запускается при входе в систему

Теперь devtools-8доступен и его можно использовать с помощью следующих команд:

yum install centos-release-scl
yum install devtoolset-8-gcc devtoolset-8-gcc-c++
scl enable devtoolset-8 -- bash

Более подробно это объяснено в этом ответе на StackOverflow:Как установить GCC/G++ 8 на CentOS . И, конечно же, если вам нужен GFortran, вы можете установить его так же, как -пакет devtoolset-8-gcc-gfortran.

3
12.07.2020, 23:39
3 ответа

Наконец-то я нашел решение (благодаря Стюарту и другим ). Я изменил исходный служебный файл:

[Unit]
Description=Nfancurve service
After=graphical-session.target
Requires=graphical-session.target

[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT

[Install]
WantedBy=graphical-session.target

, удалив строку Requires -и заменив все экземпляры graphical-session.targetнаdefault.target(в строках Afterи WantedBy). Это приводит к моему текущему сервисному файлу:

[Unit]
Description=Nfancurve service
After=default.target

[Service]
ExecStart=/bin/sh /usr/bin/nfancurve -c /etc/nfancurve.conf
KillSignal=SIGINT

[Install]
WantedBy=default.target

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

0
18.03.2021, 23:20

tl;dr

Измените WantedBy=graphical-session.targetна WantedBy=default.target.

Гипотеза

Я подозреваю, что проблема связана с разделом [Install]служебного файла. Установка на основе multi-user.targetможет быть вполне нормальной для системных устройств, но эквивалентом для пользовательских -устройств является default.target. Подробнее см. systemd.special (7 )справочную страницу .

| system target     | near-equivalent user target |
|-------------------|-----------------------------|
| multi-user.target | default.target              |
| graphical.target  | graphical-session.target    |

Другими целями, которые также могут вас заинтересовать, являются graphical-session-pre.targetили xdg-desktop-autostart.target.

default.target MVCE

Вот минимальный пример, который я только что попробовал на своей машине с Debian 11:

Служебный файл:

$ systemctl --user cat simpleuser.service
# /home/stew/.config/systemd/user/simpleuser.service
[Unit]
Description=Simple User Service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true

[Install]
WantedBy=default.target

Я установил его с:

$ systemctl --user enable simpleuser.service
Created symlink /home/stew/.config/systemd/user/default.target.wants/simpleuser.service → /home/stew/.config/systemd/user/simpleuser.service.

Я выполнил перезагрузку и вижу, что служба активна:

$ systemctl --user status simpleuser.service
● simpleuser.service - Simple User Service
     Loaded: loaded (/home/stew/.config/systemd/user/simpleuser.service; enabled; vendor preset: enable>
     Active: active (exited) since Sun 2020-07-12 10:12:54 CEST; 13min left
    Process: 1127 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 1127 (code=exited, status=0/SUCCESS)

Jul 12 10:12:54 stewbian systemd[1106]: Starting Simple User Service...
Jul 12 10:12:54 stewbian systemd[1106]: Finished Simple User Service.

Если вас интересует подсостояние (exited):Если вы используете что-то вроде Type=simpleи ExecStart=/bin/sleep infinity, вместо этого вы получите (running).

графические -проблемы с session.target

Я нашел ваш вопрос в виде отчета об ошибке на github .

Если вы устанавливаете на основе графического -session.target, возможно, он не запускается. Я только что запустил это на своей установке KDE/i3 и воспроизвел на стандартной установке Gnome3.

$ systemctl --user status graphical-session.target
● graphical-session.target - Current graphical user session
     Loaded: loaded (/usr/lib/systemd/user/graphical-session.target; static; vendor preset: disabled)
     Active: inactive (dead)
       Docs: man:systemd.special(7)

Похоже, что DE на самом деле не реализуют эту цель согласно своему дизайну. В этом случае лучше -использовать WantedBy=default.target. Ваш сценарий не выглядит основанным на графическом интерфейсе -, поэтому я уверен, что default.targetбудет в порядке. В противном случае вы можете использовать After=graphical.targetв разделе [Unit].

Согласно systemd.special (7 )справочной странице , graphical-session.targetдолжно быть BoundBy=DE (, т.е.{gnome,kde,xfce}-session.target). Таким образом, когда Gnome запустится, он поднимет графический -session.target. Когда я проверяю объекты dbus, я ясно не вижу никаких отношений с какой-либо целью, которые могли бы его поднять.

$ busctl introspect --user org.freedesktop.systemd1 \
    /org/freedesktop/systemd1/unit/graphical_2dsession_2etarget \
    org.freedesktop.systemd1.Unit
NAME                             TYPE      SIGNATURE RESULT/VALUE                             FLAGS
.ActiveState                     property  s         "inactive"                               emits-change
.After                           property  as        2 "simpleuser.service" "basic.target"    const
.Before                          property  as        1 "shutdown.target"                      const
.BindsTo                         property  as        0                                        const
.BoundBy                         property  as        0                                        const
.Conflicts                       property  as        1 "shutdown.target"                      const
.ConsistsOf                      property  as        2 "gnome-terminal-server.service" "duns… const
.Description                     property  s         "Current graphical user session"         const
.Documentation                   property  as        1 "man:systemd.special(7)"               const
.LoadState                       property  s         "loaded"                                 const
.Names                           property  as        1 "graphical-session.target"             const
.PartOf                          property  as        0                                        const
.RequiredBy                      property  as        0                                        const
.Requires                        property  as        1 "basic.target"                         const
.SubState                        property  s         "dead"                                   emits-change
.UnitFilePreset                  property  s         "disabled"                               -
.UnitFileState                   property  s         "static"                                 -
.WantedBy                        property  as        0                                        const
.Wants                           property  as        1 "simpleuser.service"                   const

Я немного покопался в списках рассылки и обнаружил, что {gnome,kde,xfce}-session.targetбыл предложен всего четыре года назад с намерением, чтобы gnome, kde, xfce поставляли файлы *.target. Этого еще не произошло (еще ). Поэтому, хотя он и задокументирован, он неполный. Поэтому вам пока не следует использовать graphical-session.target.

3
18.03.2021, 23:20

Ваш файл.service должен выглядеть так:

[Unit]
Description=Spark service

[Service]
ExecStart=/path/to/spark/sbin/start-all.sh

[Install]
WantedBy=multi-user.target

Теперь сделайте еще несколько шагов, чтобы включить и использовать файл.service:

  1. Поместите его в папку /etc/systemd/system с именем myfirst.service
  2. Убедитесь, что исполняемый файл вашего скрипта с :chmod u+x /path/to/spark/sbin/start-all.sh
  3. Запустить :sudo systemctl start myfirst
  4. Включить запуск при загрузке :sudo systemctl enable myfirst
  5. Прекрати :sudo systemctl stop myfirst
0
18.03.2021, 23:20

Теги

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