Теперь 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
.
Наконец-то я нашел решение (благодаря Стюарту и другим ). Я изменил исходный служебный файл:
[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
Теперь служба активна, когда я запускаю свою машину и вхожу в систему.
Измените 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
.
Вот минимальный пример, который я только что попробовал на своей машине с 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)
.
Я нашел ваш вопрос в виде отчета об ошибке на 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
.
Ваш файл.service должен выглядеть так:
[Unit]
Description=Spark service
[Service]
ExecStart=/path/to/spark/sbin/start-all.sh
[Install]
WantedBy=multi-user.target
Теперь сделайте еще несколько шагов, чтобы включить и использовать файл.service:
chmod u+x /path/to/spark/sbin/start-all.sh
sudo systemctl start myfirst
sudo systemctl enable myfirst
sudo systemctl stop myfirst