Я надеюсь, что могу получить некоторую общественную справку со сценарием, который я пытаюсь сплотить. Я все еще учусь здесь, таким образом, я подвержен глупым ошибкам.
Я пытаюсь достигнуть некоторой автоматизации, когда я монтирую диск 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, не уверенный, где к отсюда. Какие-либо идеи?
Сервисный файл единицы обрисовал в общих чертах ниже работ над моим рабочим столом Ubuntu 18.04 (systemd 237), т.е. он открывает окно терминала, когда я запускаю его вручную с systemctl
команда. Конечно, для корректировки его к потребностям (монтируют usb триггер, называя сценарий..) необходимо изменить его в различных местах с остатками от сервиса, регистрируют Вас, уже имеют.
, Поскольку Вы уже подозревали, исходный сервисный файл единицы не работал, потому что была проблема с импортом переменных окружения и с попыткой открыть новую сессию GUI, которая является новым окном терминала Gnome.
самые важные изменения, чтобы заставить его работать:
необходимо выполнить или вызвать сервисную единицу как пользователь systemd сервис.
Это вызвано тем, что, запуская терминальный сеанс с системы systemd сервис расценивается небезопасный и в некоторых дистрибутивах, даже заблокированных по умолчанию. Путь systemd различает [1 130] пользователь и система , файлы единицы расположением файла. Путем размещения сервисного файла единицы (как тот ниже) в, например, /etc/systemd/user
каталог это будет распознано systemd
как пользователь сервисный файл (для большего количества информации, на которой могут использоваться каталоги, посмотрите systemd страницы справочника ). Для тестирования можно вручную запустить, сервис с [1 124] systemctl --user start servicefilename.service
Добавляют ExecStartPre
директива для включения импорта переменных среды. Это - только один способ сделать это. Существуют другие опции, которые могут больше подходить для Вашего случая (см. здесь ).
(дополнительно) выполняет сервис как 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] работы в конвейере, который может измениться/упростить вещи в почти будущее.