Saya menemukan file layanan systemd ini untuk memulai autossh untuk menjaga terowongan ssh: https://gist.github.com/thomasfr/9707568
[Unit]
Description=Keeps a tunnel to 'remote.example.com' open
After=network.target
[Service]
User=autossh
# -p [PORT]
# -l [user]
# -M 0 --> no monitoring
# -N Just open the connection and do nothing (not interactive)
# LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -p 22 -l autossh remote.example.com -L 7474:127.0.0.1:7474 -i /home/autossh/.ssh/id_rsa
[Install]
WantedBy=multi-user.target
Apakah ada cara untuk mengkonfigurasi systemd untuk memulai beberapa terowongan dalam satu layanan.
Saya tidak ingin membuat file layanan sistem N, karena saya ingin menghindari copy + paste.
Semua file layanan akan identik kecuali "remote.example.com" akan diganti dengan nama host lainnya.
1,5 tahun kemudian ...
Saya menanyakan pertanyaan ini sekitar 1,5 tahun yang lalu.
Pikiranku telah sedikit berubah. Ya, itu menyenangkan, bahwa Anda dapat melakukan ini dengan systemd (saya masih menggunakannya), tetapi saya akan menggunakan manajemen konfigurasi di masa depan.
Mengapa systemd harus mengimplementasikan bahasa templat dan mengganti% h?
Beberapa bulan kemudian saya pikir loop dan template ini harus diselesaikan dengan alat yang mengotomatiskan konfigurasi. Saya menggunakan satu alat daftar ini di wikipedia sekarang.
Jawaban:
Nah, dengan asumsi bahwa satu - satunya hal yang berubah per unit file adalah
remote.example.com
bagian, Anda dapat menggunakan Layanan Instantiated .Dari
systemd.unit
halaman manual:Pada dasarnya, Anda membuat file unit tunggal, yang berisi variabel (biasanya
%i
) di mana perbedaan terjadi dan kemudian mereka ditautkan ketika Anda "mengaktifkan" layanan itu.Misalnya, saya memiliki file unit bernama
/etc/systemd/system/[email protected]
yang terlihat seperti ini:Yang kemudian saya aktifkan
Dan bisa berinteraksi dengan
Seperti yang Anda lihat, semua instance
%i
dalam file unit bisa digantisomehost.example.com
.Ada banyak specifier yang bisa Anda gunakan dalam file unit, tapi saya menemukan
%i
cara terbaik dalam kasus seperti ini.sumber
enable
tindakan itulah yang membuat unit / layanan mulai saat boot.Berikut adalah contoh python, yang adalah apa yang saya cari. Nama
@
file dalam layanan memungkinkan Anda memulai proses N:Berbagai metode menyebutnya
Mengaktifkan berbagai penghitungan misalnya:
Aktifkan 30 pekerja:
Aktifkan 2 pekerja:
Maka pastikan untuk memuat ulang:
Sekarang Anda dapat memulai / berhenti kemudian dengan berbagai cara:
Mulai 1:
Mulai Banyak:
Hentikan Beberapa:
Periksa status:
UPDATE : Untuk mengelola instance sebagai satu layanan, Anda dapat melakukan sesuatu seperti ini:
/etc/systemd/system/[email protected]:
/usr/bin/some-worker-start.sh:
/etc/systemd/system/some-worker.service:
Dan sekarang Anda dapat mengelola semua instance dengan
sudo systemctl some-worker (start|restart|stop)
Berikut ini beberapa boilerplate untuk Anda
script.py
:sumber
systemctl some-worker (start|restart|stop)
tahu contoh mana yang harus dikerjakan?Now you can start/stop then in various ways
.Jawaban GregL sangat membantu saya. Berikut adalah contoh templat unit yang saya gunakan dalam kode saya menggunakan contoh di atas untuk server pekerjaan tukang gigi. Saya membuat skrip shell yang memungkinkan saya membuat jumlah X "pekerja" menggunakan templat yang satu ini.
sumber