GNU/Linux >> Belajar Linux >  >> Linux

Kelola beberapa instance layanan dengan systemctl

Layanan, layanan, layanan. Layanan adalah bagian besar dari komputasi. Anda sedang membaca artikel ini di sebuah layanan. Komputer Anda menjalankan layanan. Internet dipenuhi dengan mereka.

Tentang systemctl

Di Linux, cara standar menjalankan dan mengelola layanan adalah melalui utilitas systemd dan perintah systemctl . Penggunaannya cukup sederhana:Anda hanya perlu mengetahui nama layanan yang ingin Anda kelola, lalu Anda dapat menggunakan perintah ini untuk memulai atau menghentikan layanan, memeriksa statusnya, atau melakukan fungsi lainnya:

# systemctl start httpd

# systemctl stop httpd

# systemctl status httpd

Berkas satuan

Layanan didefinisikan dalam file yang disebut file unit. Mereka umumnya terletak di direktori /usr/lib/systemd/system . Berikut contoh daftarnya:

# ls /usr/lib/systemd/system
 auditd.service                              multi-user.target                    sys-kernel-debug.mount
 [email protected]                             multi-user.target.wants              sys-kernel-tracing.mount
 basic.target                                NetworkManager-dispatcher.service    syslog.socket
 basic.target.wants                          NetworkManager.service               syslog.target.wants
 blk-availability.service                    NetworkManager-wait-online.service  

Terkadang Anda perlu menjalankan lebih dari satu instance layanan pada satu host. Misalnya, jika Anda mengelola situs untuk beberapa klien, peraturan keamanan mengharuskan setiap klien memiliki instance individualnya sendiri. Ini berarti Anda perlu menjalankan layanan HTTP Apache baru untuk masing-masing layanan, tetapi memiliki banyak layanan bisa jadi sulit untuk dikelola. Jika Anda memiliki 10 pelanggan yang berbeda, Anda harus membuat 10 file unit terpisah untuk mengelolanya. Untungnya, ada cara yang lebih baik untuk menangani beberapa contoh layanan.

Simbol @

Perhatikan bahwa beberapa file unit memiliki simbol @ dalam namanya. Simbol ini memiliki makna yang menarik. Faktanya, setelah menginstal Apache HTTP Server, Anda mungkin melihat beberapa file unit layanan, termasuk yang memiliki simbol @ dalam namanya—[email protected] .

Saya akan menunjukkan kepada Anda bagaimana ini dapat membuat hidup administrator sistem sedikit lebih mudah, menggunakan Apache HTTP Server sebagai contoh:

# dnf -y install httpd

# cd /usr/lib/systemd/system
# ls -d http*
httpd.service  [email protected]  httpd.service.d  httpd.socket  httpd.socket.d

Simbol @ menunjukkan bahwa substitusi akan dilakukan. Systemd akan mengambil apa pun yang Anda ketik setelahnya dan mengganti variabel %i di dalam file unit layanan. Variabel tersebut dapat dilihat pada kutipan [email protected] berkas:

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:[email protected](8)

[Service]
Type=notify
Environment=LANG=C
Environment=HTTPD_INSTANCE=%i
ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-%i
ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful -f conf/%i.conf

Perhatikan bahwa file unit httpd default, httpd.service , tidak memiliki simbol @ dalam namanya dan terlihat berbeda. Ini digunakan untuk satu contoh default dasar dari server HTTP Apache.

Jalankan banyak instance

Selengkapnya tentang sysadmin

  • Aktifkan blog Sysadmin
  • Perusahaan Otomatis:panduan untuk mengelola TI dengan otomatisasi
  • eBook:Kemungkinan Otomatisasi untuk SysAdmins
  • Kisah dari lapangan:Panduan administrator sistem untuk otomatisasi TI
  • eBook:Panduan Kubernetes untuk SRE dan sysadmin
  • Artikel sysadmin terbaru

Untuk menjalankan beberapa instance menggunakan file unit khusus ini, masing-masing membutuhkan nama yang unik. Misalkan Anda memiliki dua klien, The Little Bank dan The Big Bank. Sebutkan contoh bank kecil dan bank besar Untuk mengelolanya, cukup tambahkan namanya setelah simbol @. Mulai setiap instance dengan perintah yang sesuai:

  • littlebank:systemctl start httpd@littlebank
  • bigbank:systemctl start httpd@bigbank

Perlu diingat bahwa sebagian besar layanan memerlukan konfigurasi tertentu untuk menghindari konflik antara instance yang berbeda. Saya tidak akan membahas semuanya di sini, tetapi Apache memerlukan beberapa hal, termasuk nomor port pendengar yang unik, file PID, dan akar dokumen.

Saya akan mendemonstrasikan dengan mencoba memulai instance littlebank. Saya berharap itu gagal, tetapi itu akan memberikan pesan status yang berguna:

# systemctl start httpd@littlebank

# systemctl status httpd@littlebank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Tue 2020-11-10 11:41:20 EST; 1min 58s ago
       Docs: man:[email protected](8)
    Process: 2205 ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2207 ExecStartPre=/bin/chown root.apache /run/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2208 ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2209 ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2210 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/littlebank.conf (code=exited, status=1/FAILURE)
   Main PID: 2210 (code=exited, status=1/FAILURE)
        CPU: 26ms

Nov 10 11:41:20 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Nov 10 11:41:20 localhost.localdomain httpd[2210]: httpd: Could not open configuration file /etc/httpd/conf/littlebank.conf>
Nov 10 11:41:20 localhost.localdomain systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAIL>
Nov 10 11:41:20 localhost.localdomain systemd[1]: [email protected]: Failed with result 'exit-code'.
Nov 10 11:41:20 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.

Anda dapat melihat bahwa systemd mengganti nama instance dengan benar sebagai pengganti %i variabel dalam file unit. Namun, Apache gagal memulai karena tidak dapat membuka file konfigurasi. Jadi, sekarang saya akan menyiapkan instance untuk menyertakan pembuatan file konfigurasi yang diperlukan (littlebank.conf dan bigbank.conf ) di /etc/httpd/conf/ :

# ls /etc/httpd/conf
bigbank.conf  httpd.conf  littlebank.conf

Sekarang Anda dapat mengelola setiap instance dengan systemctl . Masalah start dan status perintah kepada masing-masing. Saya telah mempersingkat output menjadi detail yang paling relevan:

# systemctl start httpd@bigbank
# systemctl start httpd@littlebank

# systemctl status httpd@bigbank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2020-11-10 12:26:06 EST; 56min ago
     
# systemctl status httpd@littlebank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2020-11-10 12:25:58 EST; 55min ago

Berikut adalah tampilan proses dari instance ini. Ada lebih dari satu karena Apache melakukan forking proses server, yang biasanya dilakukan:

# pgrep -a httpd
2834 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2835 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2836 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
3061 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
3062 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
3064 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf

Gunakan untuk digunakan

Fitur systemd kecil ini sangat berguna ketika Anda membutuhkan banyak contoh layanan. Saya harap Anda dapat menggunakannya dengan baik dalam pekerjaan Anda.


Linux
  1. Bagaimana mengelola Layanan Linux dengan perintah systemctl

  2. Jalankan Beberapa Contoh Proses Benar Dari Terminal Gnome?

  3. Perintah layanan dasar

  1. Kelola startup menggunakan systemd

  2. Kelola NTP dengan Chrony

  3. Cara Mengelola Beberapa Versi Python Dengan Pyenv Di Linux

  1. Cara Mengelola Layanan Systemd dengan Systemctl di Linux

  2. Cara Menggunakan Perintah Systemctl untuk Mengelola Layanan Systemd

  3. Gunakan Systemctl untuk mengelola layanan