У меня есть Debian Jessie и я подключаюсь к нему по ssh. Я хочу, чтобы команда оболочки автоматически запускалась при входе пользователя в систему с помощью systemd.
Я создал простую службу systemd ~/.config/systemd/user/foo.service
ведьма содержит:
[Unit]
Description=Systemd autostart test
Wants=local-fs.target
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo 123 >> /home/user/there;"
[Install]
WantedBy=multi-user.target
Я включил его с помощью systemctl
systemctl --user enable foo
Я создал контейнер сообщения об успехе
touch ~/there
и после перезагрузки и входа в систему (по ssh) ~/there
файл пуст.
Когда я использую его вручную
systemctl --user restart foo
оно работает.
Что мне не хватает?
По умолчанию пользователи не могут настроить запуск пользовательских служб во время загрузки. Администратор должен включать это индивидуально для каждого пользователя.
sudo loginctl enable-linger <username>
Из документация:
Включение / отключение задержки для одного или нескольких пользователей. Если включен для определенного пользователя, диспетчер пользователей создается для пользователя при загрузке и сохраняется после выхода из системы. Это позволяет пользователям, которые не вошли в систему, запускать долго работающие службы. Принимает в качестве аргумента одно или несколько имен пользователей или числовых идентификаторов UID. Если аргумент не указан, включает / отключает задержку для пользователя сеанса вызывающего.
Вам также необходимо установить правильную цель для WantedBy = как объяснил Клименти в другой ответ. В multi-user.target
не существует для пользовательских сервисов; по умолчанию есть только default.target
.
[Install]
WantedBy=default.target
Попробуй это
[Install]
WantedBy=default.target