Systemd / Ubuntu 19.04/, Может казаться, не заставляет systemd сценарий запускать терминал

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

Я пытаюсь достигнуть некоторой автоматизации, когда я монтирую диск USB. По существу я хотел бы некоторые существенные папки, скопированные через и часы inotify, помещенные в несколько папок, которые преодолеют файлы и удалят пустые каталоги, когда они перемещены.

Все работает - за исключением того, что, когда я пытаюсь выполнить команду во всем этом, которое открыло бы терминал автоматически так, чтобы я мог ввести пароль, терминал не открывается systemd.

Кажется, нет большого количества информации онлайн об этом кроме случайных огибающих переменных и изменений на сценарии, о котором я думаю, что попробовал достаточно для обращений за помощью теперь.

Детали и ошибки ниже:

Используются несколько сценариев:

Systemd, который стреляет в Карту памяти, монтируется в системе:

элементы-usb.service

[Unit]
Description=elements-usb-trigger
Requires=home-usb\x2dstorage.mount
After=home-usb\x2dstorage.mount

[Service]
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/pi/.Xauthority"
ExecStart=/home/monster/.storage-scripts/elements-run-on-mount-SHELL
ExecStop=systemctl stop elements-usb.service

[Install]
WantedBy=graphical.target
WantedBy=home-usb\x2dstorage.mount

Execstart указывает на этот код, который является, где терминал должен быть запущен:

/home/monster/.storage-scripts/elements-run-on-mount-SHELL

#!/bin/bash
gnome-terminal -e "/bin/bash -c '/home/monster/.storage-scripts/elements-run-on-mount;exec $SHELL'"

Это выполняет сценарий ниже...

#!/bin/bash
###--Move existing files to USB--###

#tv folder mover initial sync
rsync -avhP --remove-source-files /home/monster/Videos/htpc-server-tv/  /home/usb-storage/Video/tv
notify-send "R-Sync says" "Moving tv shows from tv shows"

find /home/monster/Videos/htpc-server-tv/ -type f -empty -exec rm {} \;
notify-send "TV folder says" "Cleaned :)"

#movies folder mover initial sync
rsync -avhP --remove-source-files /home/monster/Videos/htpc-server-movies/  /home/usb-storage/Video/movies
notify-send "R-Sync says" "Moving movies to movies folder"

find /home/monster/Videos/htpc-server-movies/ -type f -empty -exec rm {} \;
notify-send "Movie folder says" "Me too :)"

#R-Sync timeshift to usb copy
sudo rsync -avhP /home/timeshift/  /home/usb-storage/Backup/monster-laptop/timeshift --info=stats2&
notify-send "R-Sync says" "Timeshift backup of backup taking off"

#virtual server sync - htpc server to usb copy
sudo rsync -avhP /home/virtualbox/htpc-server/  /home/usb-storage/Backup/virtual servers/htpc-server --info=stats2&
notify-send 'R-Sync says' 'htpc-server backup of backup underway :)'

#virtual server sync - crypto server to usb copy
sudo rsync -avhP /home/virtualbox/crypto-server/  /home/usb-storage/Backup/virtual servers/crypto-server --info=stats2&
notify-send 'R-Sync says' 'crypto-server backup of backup underway :)'

####--WATCH FOLDERS--####
#NOTE: Requires inotify tools "sudo apt-get install inotify-tools"

#tv - move new videos to USB drive videos folder
sh /home/monster/.storage-scripts/inotify-script-watchenmove-videos-tv&
notify-send "R-Sync says" "Boom! tv"

#movie - move new videos to USB drive videos folder
sh /home/monster/.storage-scripts/inotify-script-watchenmove-videos-movies&
notify-send "R-Sync says" "Bam! - movie"

#Bind USB drive folders to home/videos/.usb-Videos to present to virtual machine
#sudo mount --bind '/home/usb-storage/Video' '/home/monster/Videos/.usb-Videos'&

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

Результаты systemctl элементы-usb.service состояния

● elements-usb.service - elements-usb-trigger
   Loaded: loaded (/etc/systemd/system/elements-usb.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2019-08-24 11:20:51 BST; 31s ago
 Main PID: 13044 (code=exited, status=1/FAILURE)

Aug 24 11:20:51 monster-laptop systemd[1]: Started elements-usb-trigger.
Aug 24 11:20:51 monster-laptop elements-run-on-mount-SHELL[13044]: # Option “-e” is deprecated and might be removed in a later version
Aug 24 11:20:51 monster-laptop elements-run-on-mount-SHELL[13044]: # Use “-- ” to terminate the options and put the command line to ex
Aug 24 11:20:51 monster-laptop elements-run-on-mount-SHELL[13044]: No protocol specified
Aug 24 11:20:51 monster-laptop elements-run-on-mount-SHELL[13044]: Unable to init server: Could not connect: Connection refused
Aug 24 11:20:51 monster-laptop elements-run-on-mount-SHELL[13044]: # Failed to parse arguments: Cannot open display:
Aug 24 11:20:51 monster-laptop systemd[1]: elements-usb.service: Main process exited, code=exited, status=1/FAILURE
Aug 24 11:20:51 monster-laptop systemd[1]: elements-usb.service: Failed with result 'exit-code'.

** Кажется, перестал работать из-за некоторой диаграммы / проблема GUI с запуском терминала.

Если процесс systemd начал один только сценарий, т.е./home/monster/.storage-scripts/elements-run-on-mount

вместо:

терминал гнома-e "/bin/bash-c '/home/monster/.storage-scripts/elements-run-on-mount; исполнительный $SHELL'"

Это работает очень хорошо в Карте памяти, монтируются, но нет никаких визуальных индикаторов относительно того, что это составило, и некоторые функции R-синхронизации могут занять немного времени.

Там вероятно дальнейший вопрос об использовании sudo в сценарии с тех пор systemd, "Я думаю", запускает скрипты как корень так или иначе, и возможно немного корректировки там могло бы также требоваться.

Вывод journalctl - ксенон

    Aug 24 11:27:50 monster-laptop gjs[5062]: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
Aug 24 11:27:50 monster-laptop gjs[5062]: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
Aug 24 11:28:48 monster-laptop gnome-shell[4130]: [night-light-slider] Setting night light schedule from 5 to 17
Aug 24 11:30:01 monster-laptop CRON[17646]: pam_unix(cron:session): session opened for user root by (uid=0)
Aug 24 11:30:01 monster-laptop CRON[17647]: (root) CMD ([ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/
Aug 24 11:30:01 monster-laptop CRON[17646]: pam_unix(cron:session): session closed for user root
Aug 24 11:31:15 monster-laptop org.gnome.Shell.desktop[4130]: [9934:9934:0824/113115.982679:ERROR:buffer_manager.cc(488)] [.DisplayCom
Aug 24 11:32:04 monster-laptop systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- A start job for unit anacron.service has finished successfully.
-- 
-- The job identifier is 6098.
Aug 24 11:32:04 monster-laptop anacron[18538]: Anacron 2.3 started on 2019-08-24
Aug 24 11:32:04 monster-laptop anacron[18538]: Normal exit (0 jobs run)
Aug 24 11:32:04 monster-laptop systemd[1]: anacron.service: Succeeded.
-- Subject: Unit succeeded
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- The unit anacron.service has successfully entered the 'dead' state.
lines 1747-1769/1769 (END)

Так, понравитесь парням и галлонам - можно ли помочь мне исправить свой сценарий во-первых?

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

Спасибо


● elements-usb.service - elements-usb-trigger
   Loaded: loaded (/etc/systemd/user/elements-usb.service; static; vendor preset: enabled)
   Active: inactive (dead)

Aug 26 08:58:58 monster-laptop systemd[5099]: Starting elements-usb-trigger...
Aug 26 08:58:58 monster-laptop gnome-terminal[8125]: # Option “-e” is deprecated and might be removed in a later versio
Aug 26 08:58:58 monster-laptop gnome-terminal[8125]: # Use “-- ” to terminate the options and put the command line to e
Aug 26 08:58:58 monster-laptop gnome-terminal[8125]: # _g_io_module_get_default: Found default implementation gvfs (GDa
Aug 26 08:58:58 monster-laptop gnome-terminal[8125]: # _g_io_module_get_default: Found default implementation dconf (DC
Aug 26 08:58:58 monster-laptop gnome-terminal[8125]: # watch_fast: "/org/gnome/terminal/legacy/" (establishing: 0, acti
Aug 26 08:58:58 monster-laptop gnome-terminal[8125]: # unwatch_fast: "/org/gnome/terminal/legacy/" (active: 0, establis
Aug 26 08:58:58 monster-laptop gnome-terminal[8125]: # watch_established: "/org/gnome/terminal/legacy/" (establishing: 
Aug 26 08:58:59 monster-laptop systemd[5099]: elements-usb.service: Succeeded.
Aug 26 08:58:59 monster-laptop systemd[5099]: Started elements-usb-trigger.

TBH, не уверенный, где к отсюда. Какие-либо идеи?

0
задан 26 August 2019 в 18:17

1 ответ

Сервисный файл единицы обрисовал в общих чертах ниже работ над моим рабочим столом Ubuntu 18.04 (systemd 237), т.е. он открывает окно терминала, когда я запускаю его вручную с systemctl команда. Конечно, для корректировки его к потребностям (монтируют usb триггер, называя сценарий..) необходимо изменить его в различных местах с остатками от сервиса, регистрируют Вас, уже имеют.

, Поскольку Вы уже подозревали, исходный сервисный файл единицы не работал, потому что была проблема с импортом переменных окружения и с попыткой открыть новую сессию GUI, которая является новым окном терминала Gnome.

самые важные изменения, чтобы заставить его работать:

  1. необходимо выполнить или вызвать сервисную единицу как пользователь systemd сервис.
    Это вызвано тем, что, запуская терминальный сеанс с системы systemd сервис расценивается небезопасный и в некоторых дистрибутивах, даже заблокированных по умолчанию. Путь systemd различает [1 130] пользователь и система , файлы единицы расположением файла. Путем размещения сервисного файла единицы (как тот ниже) в, например, /etc/systemd/user каталог это будет распознано systemd как пользователь сервисный файл (для большего количества информации, на которой могут использоваться каталоги, посмотрите systemd страницы справочника ). Для тестирования можно вручную запустить, сервис с [1 124]

    systemctl --user start servicefilename.service
    
  2. Добавляют ExecStartPre директива для включения импорта переменных среды. Это - только один способ сделать это. Существуют другие опции, которые могут больше подходить для Вашего случая (см. здесь ).

  3. (дополнительно) выполняет сервис как Type=oneshot. Таким образом, это будет только работать однажды при инициировании и Вам не нужно ExecStop директива. Снова, это - только один способ сделать это.

    [Unit]  
    Description=elements-usb-trigger  
    Requires=default.target  
    After=default.target  
    
    [Service]  
    Type=oneshot  
    ExecStartPre=/bin/systemctl --user import-environment  
    ExecStart=/usr/bin/gnome-terminal -e "/bin/bash -c 'echo hello;exec $SHELL'"  
    
    [Install]  
    \# optional dependencies
    

Обратите внимание на то, что, кажется, существуют приблизительно [1 110] работы в конвейере, который может измениться/упростить вещи в почти будущее.

0
ответ дан 23 October 2019 в 04:42

Другие вопросы по тегам:

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