Bermigrasi skrip pemula baru ke sistemd

17

Saya baru saja memutakhirkan server dari Ubuntu 14.10 menjadi 15.04, dan beberapa layanan yang saya mulai melalui skrip pemula baru kustom tidak lagi berjalan.

Pemahaman saya adalah bahwa saya perlu menulis ulang mereka sebagai systemdlayanan, tetapi pemikiran mempelajari seluruh systemdsistem dalam semalam agak menakutkan.

Skrip pemula baru diluncurkan autosshsaat startup, dan saya memiliki beberapa skrip serupa lainnya yang meluncurkan proses yang berjalan lama.

#/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

Bagaimana saya bisa menulis ulang ini sebagai systemdlayanan?

trvrm
sumber
3
Systemd untuk pengguna pemula adalah titik awal yang baik.
muru

Jawaban:

13

aturan pertama untuk bermigrasi ke systemd

Pada titik ini, pada tahun 2015, kemungkinan besar seseorang telah melakukannya.

systemd telah ada selama beberapa tahun. Dan telah ada seluruh industri rumahan orang menulis file unit dan menerbitkannya. GitHub, khususnya, tampaknya menarik repositori koleksi unit layanan.

Memang hanya mencari WWW untuk autossh.service(sebagai ungkapan) muncul:

unit templat

Yang mengatakan, seperti yang saya tunjukkan di beberapa tempat di StackExchange saja, migrasi semacam ini bukan proses mekanistik, dan kadang-kadang hanya menerjemahkan secara robot dari apa pun yang ada pada satu unit file melakukan hal-hal yang salah, atau setidaknya buruk. Dalam hal ini, autosshterengah-engah positif untuk ditangani dengan unit template , yang akan dipakai menjadi unit layanan aktual, parameter oleh nama target. Jadi /etc/systemd/system/[email protected], miliki:

[Satuan]
Deskripsi = Layanan AutoSSH untuk terowongan terbalik dari% i 
Setelah = network.target

[Layanan]
Pengguna = autossh
EnvironmentFile = / etc /% p /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Install]
WantedBy = multi-user.target

Buat file /etc/autossh/other_server.example.confdengan nama , minimal:

SSH_USER = joe

Semua kontrol yang biasa kemudian berlaku:

  • systemctl enable autossh@other_server.example - Mengaktifkan instance untuk dimulai secara otomatis saat bootstrap.
  • systemctl start autossh@other_server.example - Mulai secara manual dengan segera.
  • systemctl status autossh@other_server.example - Lihat statusnya.

Dan ya, aturan pertama bahkan berlaku untuk ini. Mencari, orang dapat menemukan bahwa saya telah dipukuli oleh ini, hanya di bawah dua minggu, oleh Greg Freemyer di OpenSUSE.

JdeBP
sumber
Terima kasih - saya datang dengan sesuatu yang mirip dengan itu, tetapi saya tidak mengetahui ide 'unit template'
trvrm
@ JdeBP Saya juga punya pertanyaan serupa di sini . Ingin melihat apakah Anda dapat membantu saya.
user1950349