โอนย้ายสคริปต์ upstart พื้นฐานไปยัง systemd


17

ฉันเพิ่งอัพเกรดเซิร์ฟเวอร์จาก Ubuntu 14.10 เป็น 15.04 และบริการบางอย่างที่ฉันเริ่มจากสคริปต์ upstart แบบกำหนดเองจะไม่ทำงานอีกต่อไป

ความเข้าใจของฉันคือฉันต้องเขียนใหม่เป็นsystemdบริการ แต่ความคิดในการเรียนรู้ทั้งsystemdระบบในชั่วข้ามคืนนั้นค่อนข้างน่ากลัว

สคริปต์พุ่งพรวดเพิ่งเปิดตัวautosshเมื่อเริ่มต้นและฉันมีสองสามสคริปต์ที่คล้ายกันอื่น ๆ ที่เปิดใช้กระบวนการที่ใช้เวลานาน

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

ฉันจะเขียนสิ่งนี้เป็นsystemdบริการได้อย่างไร


3
Systemd สำหรับผู้ใช้พุ่งพรวดเป็นจุดเริ่มต้นที่ดี
muru

คำตอบ:


13

กฎข้อแรกสำหรับการย้ายไปยัง systemd

เมื่อมาถึงจุดนี้ในปี 2558 เป็นไปได้มากที่สุดที่ใครบางคนทำไปแล้ว

systemd ได้รับรอบสำหรับบางปี และมีอุตสาหกรรมคอทเทจทั้งหมดของคนเขียนไฟล์หน่วยและเผยแพร่พวกเขา โดยเฉพาะอย่างยิ่ง GitHub ดูเหมือนจะดึงดูดคลังเก็บของหน่วยบริการ

อันที่จริงเพียงแค่ค้นหา WWW สำหรับautossh.service(เป็นวลี) จะปรากฏขึ้น:

หน่วยแม่แบบ

ที่กล่าวว่าตามที่ฉันได้ชี้ให้เห็นในหลาย ๆ ที่บน StackExchange เพียงอย่างเดียวการโยกย้ายแบบนี้ไม่ใช่กระบวนการกลไกและบางครั้งก็เป็นการแปลแบบหุ่นยนต์จากสิ่งที่มีไปยังไฟล์หน่วยกำลังทำสิ่งผิดพลาดหรืออย่างน้อยก็แย่ ในกรณีนี้autosshจะหอบบวกที่จะจัดการกับหน่วยแม่แบบที่มันจะถูกยกตัวอย่างเป็นหน่วยบริการที่เกิดขึ้นจริงพารามิเตอร์โดยชื่อเป้าหมาย เพื่อให้/etc/systemd/system/autossh@.serviceมี:

[Unit]
คำอธิบาย = บริการ AutoSSH สำหรับอุโมงค์ย้อนกลับจาก% i 
หลังจาก = network.target

[บริการ]
ผู้ใช้ = autossh
EnvironmentFile = / etc / p% /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[ติดตั้ง]
WantedBy = multi-user.target

สร้างไฟล์ที่ชื่อ/etc/autossh/other_server.example.confด้วย, minimally:

SSH_USER = joe

จากนั้นใช้การควบคุมตามปกติทั้งหมด:

  • systemctl enable autossh@other_server.example - เปิดใช้งานอินสแตนซ์ที่จะเริ่มต้นโดยอัตโนมัติที่ bootstrap
  • systemctl start autossh@other_server.example - เริ่มต้นอินสแตนซ์นั้นด้วยตนเองทันที
  • systemctl status autossh@other_server.example - ดูสถานะของมัน

และใช่กฎข้อแรกใช้กับสิ่งนี้ การค้นหาสามารถพบว่าฉันถูกโจมตีโดย Greg Freemyer ที่ OpenSUSE


ขอบคุณ - ฉันคิดสิ่งที่คล้ายกัน แต่ฉันไม่ทราบความคิดของ 'หน่วยแม่แบบ'
trvrm

@JdeBP ฉันยังมีคำถามที่คล้ายกันที่นี่ อยากดูว่าคุณสามารถช่วยฉันออก
user1950349
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.