Вы должны использовать User=
директиву в вашем systemd
сервисе.
Пользователь =, Группа =
Установите пользователя или группу UNIX, для которых выполняются процессы, соответственно. Принимает одно имя пользователя или группы, или числовой идентификатор в качестве аргумента. Для системных служб (служб, запускаемых диспетчером системных служб, т.е. управляемых PID 1) и для пользовательских служб пользователя root (служб, управляемых экземпляром root systemd --user), по умолчанию используется значение «root», но User = может использоваться для указания другого пользователя. Для пользовательских сервисов любого другого пользователя переключение идентификационных данных пользователя не разрешено, поэтому единственно допустимым параметром является тот же пользователь, с которым работает менеджер сервисов пользователя. Если группа не установлена, используется группа по умолчанию для пользователя. Этот параметр не влияет на команды, чья командная строка имеет префикс «+».
https://www.freedesktop.org/software/systemd/man/systemd.exec.html#User=
Я также рекомендовал бы переместить ваш скрипт из домашнего каталога в стандартный путь, например /usr/local/bin
или что-то подобное.
Вы также должны обеспечить порядок ваших connectdocker.service
, указав его After=docker.service
и Requires=docker.service
. Как написано, connectdocker.service
вероятно, он пытается начать примерно в то же время docker.service
, что и вам нужно подождать, docker.service
пока он не подключится, прежде чем вы сможете подключиться к нему.
Требуется =
Настраивает зависимости требований от других модулей. Если это устройство активируется, перечисленные здесь устройства также будут активированы. Если один из других модулей будет деактивирован или его активация не удастся, этот блок будет деактивирован. Эта опция может быть указана более одного раза, или несколько единиц, разделенных пробелом, могут быть указаны в одной опции, и в этом случае будут созданы зависимости требований для всех перечисленных имен. Обратите внимание, что зависимости требований не влияют на порядок запуска или остановки служб. Это должно быть настроено независимо с опциями After = или Before =. Если юнит foo.service требует юнита bar.service, настроенного с помощью Требуется =, и не задан порядок упорядочения с помощью After = или До =, тогда оба блока будут запущены одновременно и без каких-либо задержек между ними, если активирован foo.service. Часто,
Обратите внимание, что этот тип зависимости не означает, что другой модуль всегда должен быть в активном состоянии, когда он работает. В частности: неудачные проверки условий (такие как ConditionPathExists =, ConditionPathExists =,… - см. Ниже) не приводят к сбою при запуске задания модуля с зависимостью требует =. Кроме того, некоторые типы модулей могут деактивироваться самостоятельно (например, сервисный процесс может принять решение о чистом выходе или устройство может быть отключено пользователем), что не распространяется на модули, имеющие зависимость Require =. Используйте тип зависимости BindsTo = вместе с After =, чтобы гарантировать, что юнит никогда не может быть в активном состоянии без конкретного другого юнита, также находящегося в активном состоянии (см. Ниже).
Обратите внимание, что зависимости этого типа можно также настроить вне файла конфигурации модуля, добавив символическую ссылку в каталог .requires /, сопровождающий файл модуля. Подробнее см. Выше.
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires=
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=