สัญลักษณ์ @ และ 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 นอกจากนี้ยังมีประโยชน์สำหรับซ็อกเก็ตและหน่วยอื่น ๆ (เพิ่มเพื่อตอบตอนนี้ขอบคุณ :-)
แพทช์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.