Символ @ і 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)

Відповіді:


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, до якого ви підключаєтесь.

Але не сприймай мого слова. Спробуй! Створимо просту службу, яка виводить повідомлення в syslog. Створіть файл /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 . Це також корисно для розеток та інших типів блоків. (Додано, щоб відповісти зараз, дякую. :-)
Патчі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.