21

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

  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)

1 ответ1

38

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .