Biểu tượng @ và systemctl và vsftpd


27

Tôi có một câu hỏi gồm hai phần.

  1. Tầm quan trọng của biểu tượng @ trong các tập lệnh systemctl là gì?

  2. Làm cách nào để bắt đầu vsftpd trong fedora 16, (trong một số hướng dẫn dường như có chứa tên @ trong tên của nó)? Tôi đã làm tất cả mọi thứ mà các hướng dẫn nói, và nó vẫn gây ra lỗi cho tôi. http://blog.tuxforge.com/fedora-16-vsftpd/

Những gì tôi đã làm

systemctl enable vsftpd@.service

Những gì tôi thấy

Failed to issue method call: No such file or directory

(Tôi cũng đã thử điều này với một đường dẫn tuyệt đối và sau khi tôi kiểm tra thì không có tệp nào như vậy. Tệp thực không chứa dấu @ và nằm trong thư mục / lib / systemd / system /. Tôi cũng đã thử bắt đầu và kích hoạt có và không có biểu tượng @, cho phép hoạt động, nhưng bắt đầu không. Tôi nhận ra bài viết hiện đã lỗi thời, nhưng dường như tôi vẫn không thể bắt đầu dịch vụ. Khi tôi cố gắng kết nối nó không cho phép tôi)

EDIT: Tôi đã có dịch vụ để bắt đầu bằng cách nào đó, nhưng tôi vẫn muốn biết biểu tượng @ có nghĩa là gì trong một số tên dịch vụ. Ngoài ra, tôi vẫn nhận được một số lỗi đăng nhập # 500 không thể thay đổi thư mục [...], điều này có nghĩa là gì?

Để bắt đầu, tôi chỉ cần gõ

sudo systemctl enable vsftpd.service

sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)

Câu trả lời:


48

Các @biểu tượng là cho các dịch vụ đặc biệt, ổ cắm, và các đơn vị khác, nơi mà nhiều trường hợp có thể chạy.

Ví dụ, getty@.servicelà dịch vụ cung cấp thiết bị đầu cuối đăng nhập văn bản. Khi bạn nhấn Ctrl+ Alt+ F2, getty@tty2.serviceđược bắt đầu, tạo thiết bị đầu cuối ảo # 2.

Một dịch vụ khác sử dụng chức năng này là OpenVPN. Bạn có thể tạo một tệp /etc/openvpn/work.conf, được định cấu hình để kết nối với VPN tại nơi làm việc của bạn và sau đó systemctl start openvpn@work.serviceđể kết nối với tệp đó. Tương tự, bạn có thể tạo /etc/openvpn/home.conf, sau đó bắt đầu openvpn@home.servicenếu bạn có VPN ở nhà. Điều này ngăn bạn khỏi phải tạo một .servicetệp cho mọi VPN mà bạn kết nối.

Nhưng đừng hiểu ý tôi. Hãy thử nó! Hãy tạo một dịch vụ đơn giản để đưa ra một thông báo tới syslog. Tạo một tệp /etc/systemd/system/echo@.servicecó nội dung sau:

[Unit]
Description=Echo '%I'

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

Thông báo %i? systemd sẽ xác định rằng với bất cứ điều gì sau @dấu hiệu khi dịch vụ được bắt đầu. Vì vậy, hãy thử bắt đầu echo@foo.service:

systemctl start echo@foo.service

Sau đó, kiểm tra tạp chí :

 journalctl -n10

Ở phía dưới, bạn sẽ thấy systemd chạy /bin/echo foo:

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

Bây giờ, hãy thử systemctl start echo@bar.service. Lần này, systemd sẽ cư %ivới bar, vì vậy bạn sẽ thấy:

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

Thats tất cả để có nó! Bất cứ điều gì có khả năng có thể đi theo @dấu hiệu, vì systemd chỉ thay thế %itrong định nghĩa dịch vụ với nó. OpenVPN sử dụng nó để cấu hình, các dịch vụ khác có thể sử dụng cho mục đích khác, như số cổng.

Để biết thêm thông tin, xem man systemd.unit.


1
chúng có bắt đầu và dừng như các dịch vụ bình thường ngoại trừ việc bao gồm biểu tượng @ không? Chẳng hạn, nếu tôi bắt đầu dịch vụ lần thứ hai, tôi có thể bắt đầu lại không? Làm thế nào để bạn bắt đầu nhiều trường hợp?
rubixibuc

Yup, chỉ cần thay đổi văn bản theo @dấu hiệu thành bất cứ điều gì phù hợp. Tôi đã thêm một ví dụ bạn có thể kiểm tra để xem nó hoạt động như thế nào.
Bản vá

@Patches: Tài liệu cho "Biểu tượng @ dành cho các dịch vụ đặc biệt có thể chạy nhiều trường hợp ở đâu?"? Tôi không thấy nó tại freedesktop.org/software/systemd/man/systemd.service.html
pevik

Nó được mô tả trong systemd.unit . Nó cũng hữu ích cho ổ cắm và các loại đơn vị khác. (Đã thêm vào để trả lời ngay bây giờ, cảm ơn. :-)
Bản vá lỗi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.