Параметры After=
и Before=
являются строго для заказа запуска (и, возможно, выключения) двух служб, если запрашивается запуск обеих. Перечисление служб не означает, что эти службы также будут запущены.
Для управления запуском другой службы необходимо использовать Reques=
, Wants=
, или Conflicts=
(которые находятся в разделе [Unit]
) или WantedBy=
(которые находятся в разделе [Install]
).
В вашем случае, вы хотите запустить службу, когда что-то, от чего она зависит, будет запущено (что не происходит автоматически, так как для этого нет причин). Вы захотите добавить в файл следующее и затем запустить systemctl enable dependence
:
[Install]
WantedBy=main.service
Это говорит о том, что когда main
запускается, чтобы также запустить этот сервис, и что если этот сервис окажется неудачным, то не останавливайте main
.
find /volume1/photoTest -type d -name eaDir_tmp -prune \
-exec sh -c 'rsync -a "$1"/ "${1%/*}/@eaDir"' sh {} ';' \
-o -type d -name @eaDir -prune
Это будет искать все каталоги, имя которых eaDir_tmp
в или ниже /volume1/photoTest
. Для каждого такого каталога будет выполняться следующая команда:
rsync -a "$1"/ "${1%/*}/@eaDir"
где $1
— путь к найденному каталогу. Подстановка параметра ${1%/*}
удалит последний компонент имени пути, превратив, например,. /volume1/photoTest/folderA/eaDir_tmp
в /volume1/photoTest/folderA
(, вы также можете использовать"$( dirname "$1" )"
).
Мы удаляем все найденные каталоги eaDir_tmp
и @eaDir
из списка поиска, когда находим их, не позволяя find
войти в них. Это делается с помощью -prune
.
С find
, принимающим-execdir
:
find /volume1/photoTest -type d -name eaDir_tmp -prune \
-execdir rsync -a eaDir_tmp/ @eaDir ';' \
-o -type d -name @eaDir -prune
Связанные:
Использованиеzsh
:
for dirpath in /volume1/photoTest/*/eaDir_tmp(/DN); do
rsync -a "$dirpath"/ "$dirpath:h/@eaDir"
done
Использованиеbash
:
shopt -s dotglob nullglob
for dirpath in /volume1/photoTest/*/eaDir_tmp/; do
rsync -a "$dirpath"/ "$(dirname "$dirpath")/@eaDir"
done