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.