Simbol @ dan systemctl dan vsftpd

27

Saya punya pertanyaan dua bagian.

  1. Apa pentingnya simbol @ dalam skrip systemctl?

  2. Bagaimana cara memulai vsftpd di fedora 16, (yang dalam beberapa tutorial tampaknya mengandung @ dalam namanya)? Saya telah melakukan semua yang dikatakan tutorial, dan itu masih memberi saya kesalahan. http://blog.tuxforge.com/fedora-16-vsftpd/

Apa yang telah kulakukan

systemctl enable [email protected]

Apa yang saya lihat

Failed to issue method call: No such file or directory

(Saya telah mencoba ini dengan path absolut juga, dan setelah saya memeriksa tidak ada file seperti itu. File sebenarnya tidak mengandung tanda @, dan terletak di bawah direktori / lib / systemd / system / system. Saya juga telah mencoba memulai dan mengaktifkan dengan dan tanpa simbol @, mengaktifkan karya, tetapi memulai tidak. Saya menyadari artikel itu sekarang sudah usang, tetapi saya masih belum bisa memulai layanan. Ketika saya mencoba menghubungkannya, jangan biarkan saya)

EDIT: Saya mendapatkan layanan untuk memulai entah bagaimana, tapi saya masih ingin tahu apa arti simbol @ dalam beberapa nama layanan. Saya juga masih mendapatkan nomor kesalahan masuk # 500 tidak dapat mengubah direktori [...], apa artinya ini?

Untuk memulainya saya baru saja mengetik

sudo systemctl enable vsftpd.service

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

Jawaban:

48

The @simbol untuk layanan khusus, soket, dan unit lain di mana beberapa contoh dapat dijalankan.

Misalnya, [email protected]adalah layanan yang menyediakan terminal login teks. Ketika Anda menekan Ctrl+ Alt+ F2, [email protected]dimulai, membuat terminal virtual # 2.

Layanan lain yang menggunakan fungsi ini adalah OpenVPN. Anda dapat membuat file /etc/openvpn/work.conf, dikonfigurasikan untuk terhubung ke VPN di tempat kerja Anda, dan kemudian systemctl start [email protected]menyambungkannya. Demikian pula, Anda dapat membuat /etc/openvpn/home.conf, lalu mulai [email protected]jika Anda memiliki VPN di rumah. Ini mencegah Anda dari keharusan membuat .servicefile untuk setiap VPN yang Anda sambungkan.

Tapi jangan mengambil kata-kata saya untuk itu. Cobalah! Mari kita membuat layanan sederhana yang menampilkan pesan ke syslog. Buat file /etc/systemd/system/[email protected]dengan konten berikut:

[Unit]
Description=Echo '%I'

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

Perhatikan %i? systemd akan mengisi itu dengan apa pun yang mengikuti @tanda ketika layanan dimulai. Jadi, coba mulai [email protected]:

systemctl start [email protected]

Kemudian, periksa jurnal :

 journalctl -n10

Di bagian bawah, Anda akan melihat systemd itu berlari /bin/echo foo:

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

Sekarang, coba systemctl start [email protected]. Kali ini, systemd akan mengisi %idengan bar, sehingga Anda akan melihat:

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

Itu semua yang ada untuk itu! Apa pun yang berpotensi mengikuti @tanda, karena systemd hanya menggantikan %idefinisi layanan dengannya. OpenVPN menggunakannya untuk konfigurasi, layanan lain mungkin digunakan untuk hal lain, seperti nomor port.

Untuk informasi lebih lanjut, lihat man systemd.unit.

Tambalan
sumber
1
apakah mereka mulai dan berhenti seperti layanan normal kecuali untuk dimasukkannya simbol @? Misalnya, jika saya memulai layanan untuk kedua kalinya, apakah saya hanya akan memulai lagi? Bagaimana Anda memulai beberapa kejadian?
rubixibuc
Yup, ubah saja teks mengikuti @tanda ke apa pun yang sesuai. Saya menambahkan contoh yang dapat Anda uji untuk melihat cara kerjanya.
Tambalan
@Patches: Di mana doc untuk "Simbol @ adalah untuk layanan khusus di mana beberapa instance dapat dijalankan."? Saya tidak melihatnya di freedesktop.org/software/systemd/man/systemd.service.html
pevik
Ini dijelaskan dalam systemd.unit . Ini juga berguna untuk soket dan jenis unit lainnya. (Ditambahkan untuk menjawab sekarang, terima kasih. :-)
Patches