Символ @ и systemctl и vsftpd

11431
rubixibuc

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

  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) 
20

1 ответ на вопрос

38
Patches

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

Например, 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.

они запускаются и останавливаются, как обычные службы, за исключением включения символа @? Например, если бы я запустил службу во второй раз, я бы просто начал снова? Как начать несколько экземпляров? rubixibuc 12 лет назад 0
Да, просто измените текст после знака `@` на любой подходящий. Я добавил пример, который вы можете проверить, чтобы увидеть, как это работает. Patches 12 лет назад 0
@Patches: Где находится документ для «Символ @ предназначен для специальных служб, где можно запустить несколько экземпляров»? Я не вижу его по адресу https://www.freedesktop.org/software/systemd/man/systemd.service.html. pevik 7 лет назад 0
Это описано в [systemd.unit] (https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Description). Это также полезно для [сокетов] (https://www.freedesktop.org/software/systemd/man/systemd.socket.html) и других типов модулей. (Добавлено, чтобы ответить сейчас, спасибо. :-) Patches 7 лет назад 0