Как настроить пакет Ubuntu для запуска пользовательской службы и запускать ее только при входе пользователя в систему?

Небольшая переделка вашего perlодного -вкладыша:

perl -mPOSIX -pe 's/picture\-/$&. POSIX::ceil(++$n\/2)/ge' index.txt

Добавленное число теперь составляет половину -n, округленное в большую сторону, поэтому результат увеличивается только через каждую вторую строку.

1
05.11.2020, 02:05
1 ответ

Судя по комментариям @ajgringo619 и @meuh, я применил следующее решение:

  1. Вручную установите мой -файл daemon.service

    Я переместил my-daemon.serviceиз каталога debianмоего проекта в другой каталог (Я использовал каталог conf).

  2. В файл моего проекта .installдобавлена ​​строка для установки сервиса как пользовательского сервиса

     conf/my-daemon.service      /usr/lib/systemd/user/.
    

    См. также эту страницу archlinux (, ссылку предоставил @meuh)

  3. Включить службу

    Чтобы сделать это, я не мог использовать systemctl, потому что для этого пользователя не работает dbus, когда я запускаю установку (, т.е. я устанавливаю из своей учетной записи, а установочные пакеты создают «newuser», который существует, но не активен ). Поэтому, чтобы включить службу, я должен вручную создать программную ссылку.

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

    .
     mkdir -p /home/newuser/.config/systemd/user/default.target.wants
     ln -s /usr/lib/systemd/user/my-daemon.service /home/newuser/.config/systemd/user/default.target.wants/.
     chown -R newuser:newuser /home/newuser/.config/systemd
    
  4. Очистка

    Если вы хотите сделать наоборот (3 ), вы должны удалить программную ссылку и удалить папки. Используйте опцию -f, если она уже была удалена, а на rmdirиспользуйте --ignore-fail-on-non-empty. Для rmdirубедитесь, что вы удалили каждый из них, сначала самый глубокий, чтобы получить состояние, подобное тому, которое было бы у вас до установки.

  5. Автозапуск?

    Создание ссылки в (3 )— это автозапуск (включение ), перезагрузите компьютер или выйдите из системы и снова войдите в нее как новый пользователь, и устройство будет запущено автоматически. Это предполагает, что сервис работает, конечно. Убедитесь, что ваш хочет правильно определен:

     [Install]
     WantedBy=default.target
    

    Существуют и другие параметры, которые не будут работать в пользовательской службе. Например, нельзя указать параметры User=...и Group=....Такие ошибки появятся в соответствующем журнале

     journalctl --user -u my-daemon
    

    Важное примечание :--userочень важно, если вы ранее запускали свою службу как системную службу, с помощью --userвы увидите журналы из системной службы и ничего из журналов вашего пользователя.

Еще одна деталь: мне нужно было открыть окно, и чтобы это работало, мне пришлось добавить переменную окружения:

Environment="DISPLAY=:0"

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

1
18.03.2021, 22:52

Теги

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