Символ @ и systemctl и vsftpd

27

У меня есть вопрос из двух частей.

  1. Какое значение символа @ в сценариях systemctl?

  2. Как запустить vsftpd в fedora 16 (которая в некоторых руководствах, кажется, содержит в своем имени символ @)? Я сделал все, что говорят учебники, и это все еще дает мне ошибку. http://blog.tuxforge.com/fedora-16-vsftpd/

Что я сделал

systemctl enable vsftpd@.service

Что я вижу

Failed to issue method call: No such file or directory

(Я пробовал это также с абсолютным путем, и после того, как я проверил, такого файла нет. Настоящий файл не содержит знака @ и находится в каталоге / lib / systemd / system /. Я также пробовал запуск и включение с символом @ и без него, включение работает, но запуск - нет. Я понимаю, что статья устарела, но я все еще не могу запустить службу. Когда я пытаюсь подключиться, она не позволяет)

РЕДАКТИРОВАТЬ: я получил службу, чтобы начать как-то, но я все еще хотел бы знать, что символ @ означает в некоторых названиях служб. Также я все еще получаю номер ошибки входа в систему # 500, не может изменить каталог [...], что это значит?

Для начала я просто набрал

sudo systemctl enable vsftpd.service

sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)
rubixibuc
источник

Ответы:

48

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

Например, getty@.serviceэто сервис, который предоставляет текстовые терминалы входа в систему. При нажатии кнопки Ctrl+ Alt+ F2, getty@tty2.serviceзапускается, создание виртуального терминала # 2.

Другой сервис, который использует эту функциональность, - OpenVPN. Вы можете создать файл /etc/openvpn/work.conf, настроенный для подключения к VPN на рабочем месте, а затем systemctl start openvpn@work.serviceподключиться к нему. Точно так же вы можете создать /etc/openvpn/home.conf, а затем запустить, openvpn@home.serviceесли у вас дома есть VPN. Это избавляет вас от необходимости создавать .serviceфайл для каждой VPN, к которой вы подключаетесь.

Но не верьте мне на слово. Попробуйте! Давайте создадим простой сервис, который выводит сообщение в системный журнал. Создайте файл /etc/systemd/system/echo@.serviceсо следующим содержимым:

[Unit]
Description=Echo '%I'

[Service]
Type=oneshot
ExecStart=/bin/echo %i
StandardOutput=syslog

Заметьте %i? systemd заполняет это всем, что следует за @знаком при запуске службы. Итак, попробуйте начать echo@foo.service:

systemctl start echo@foo.service

Затем проверьте журнал :

 journalctl -n10

Внизу вы увидите, что systemd работает /bin/echo foo:

Feb 24 12:41:01 localhost echo[8412]: foo

Теперь попробуй systemctl start echo@bar.service. На этот раз, Systemd заполнит %iс bar, так что вы увидите:

Feb 24 12:42:51 localhost echo[8432]: bar

Это все, что нужно сделать! Все может потенциально следовать за @знаком, поскольку systemd просто заменяет его %iв определении сервиса. OpenVPN использует его для конфигурации, другие службы могут использовать что-то еще, например, номер порта.

Для получения дополнительной информации см man systemd.unit.

Патчи
источник
1
они запускаются и останавливаются как обычные службы, за исключением включения символа @? Например, если бы я запустил службу во второй раз, я бы просто начал снова? Как начать несколько экземпляров?
Rubixibuc
Да, просто измените текст после @знака на что угодно. Я добавил пример, который вы можете проверить, чтобы увидеть, как это работает.
патчи
@Patches: Где находится документ для «Символ @ предназначен для специальных служб, где можно запустить несколько экземпляров»? Я не вижу этого на freedesktop.org/software/systemd/man/systemd.service.html
pevik
Это описано в systemd.unit . Это также полезно для сокетов и других типов устройств. (Добавлено, чтобы ответить сейчас, спасибо. :-)
Патчи