systemd adalah perangkat lunak yang memungkinkan Anda meluncurkan program Linux saat boot pada sebagian besar distribusi Linux, termasuk Ubuntu. Anda dapat dengan mudah membuat layanan terintegrasi menggunakan systemd, yang dapat dikontrol menggunakan systemctl. systemd memungkinkan program Anda untuk menulis ke jurnal, sehingga lebih mudah untuk melacak dan memantau aktivitas layanan.
Perlu meluncurkan program Linux saat boot? Perangkat lunak systemd menyediakan cara untuk melakukannya di distro Linux mana pun dengan systemd — yang merupakan sebagian besar dari mereka saat ini, termasuk Ubuntu. Kami akan memandu Anda melalui proses pembuatan layanan terintegrasi —dan bahkan membahasnya di jurnal.
Menjalankan Program saat Startup dengan systemd
Terkadang perangkat lunak yang Anda instal di komputer Anda menghubungkan dirinya ke dalam proses startup Linux, sehingga program tersebut secara otomatis diluncurkan setiap kali komputer dinyalakan. Anda dapat dengan mudah mencapai perilaku yang sama dengan program dan skrip Anda sendiri, atau program lain apa pun yang ada di komputer Anda. Ini berguna jika Anda menghosting beberapa jenis server yang ingin Anda jalankan segera setelah mesin dihidupkan (seperti Server Minecraft!), atau jika Anda memiliki perangkat lunak khusus lain yang ingin Anda jalankan tanpa perlu memulainya secara manual.
Program yang diluncurkan saat startup dikendalikan oleh systemd, manajer sistem dan layanan. systemd adalah proses pertama yang dijalankan saat startup. Itu selalu memiliki ID proses (PID) 1. Setiap proses lain yang berjalan di komputer Anda dimulai oleh systemd, atau oleh proses yang systemd telah dimulai.
Program yang berjalan di latar belakang disebut daemon atau layanan. Huruf “d” di akhir systemd adalah singkatan dari daemon. Pada artikel ini, kami akan membuat layanan contoh. Untuk mencentang semua kotak, layanan kami harus:
Terintegrasi dengan systemd melalui file unit layanan Diluncurkan saat startup Dapat dikontrol menggunakan systemctl, antarmuka kontrol untuk systemdDapat menulis ke jurnal
Kami akan mendemonstrasikan cara mengatur layanan sistem yang diluncurkan ketika Anda memulai sistem Anda dengan systemd. Untuk meluncurkan program grafis saat Anda masuk, gunakan manajer startup desktop Anda.
Membuat Program Layanan untuk systemd untuk Memulai
Kita harus memiliki program yang akan diluncurkan systemd. Kami akan membuat skrip sederhana, yang disebut “htg.sh”. Tutorial ini menggunakan editor teks Gedit, tetapi Anda dapat menggunakan editor teks apa pun yang Anda sukai.
touch htg.sh
gedit htg.sh
Editor gedit akan terbuka. Salin dan tempel teks berikut ke editor.
#!/bin/bashecho “htg.service: ## Mulai ##” | systemd-cat -p info while :doTIMESTAMP=$(tanggal ‘+%Y-%m-%d %H:%M:%S’)echo “htg.service: stempel waktu ${TIMESTAMP}” | systemd-cat -p infosleep 60done
Simpan perubahan Anda dan tutup editor.
Skrip tidak melakukan banyak hal, tetapi ada beberapa poin yang perlu diperhatikan.
Kedua garis gema disalurkan melalui systemd-cat, sebuah program yang mengambil output dari suatu program dan mengirimkannya ke jurnal. Entri ke jurnal diberi prioritas. Kami menggunakan opsi -p (prioritas) untuk menunjukkan bahwa pesan kami hanya untuk informasi (info). Itu bukanlah kesalahan atau peringatan penting. Ada perulangan while yang tak ada habisnya. Variabel TIMESTAMP diatur ke tanggal dan waktu saat ini. Ini diformat menjadi pesan dan dikirim ke jurnal. Skrip kemudian tertidur selama 60 detik. Setelah 60 detik, putaran diulangi. Jadi, skrip ini menulis pesan dengan stempel waktu ke jurnal satu kali per menit.
Kami akan menyalin skrip ke direktori /usr/local/bin.
sudo cp htg.sh /usr/local/bin
Dan kami perlu membuatnya dapat dieksekusi:
sudo chmod +x /usr/local/bin/htg.sh
Membuat Layanan File Unit
Setiap program yang dijalankan oleh systemd memiliki file definisi, yang disebut file unit layanan. Ini menyimpan atribut tertentu yang dapat digunakan systemd untuk mencari dan meluncurkan program, dan untuk menentukan beberapa perilakunya.
Kita perlu membuat file unit untuk layanan baru kami, namun sebaiknya pastikan tidak ada file unit yang ada yang memiliki nama yang ingin kami berikan pada layanan baru kami.
sudo systemctl list-unit-files –type-service
Anda dapat menelusuri daftar file unit, yang diurutkan berdasarkan abjad, dan memeriksa apakah nama yang ingin Anda gunakan tidak diambil.
Layanan kami akan disebut “htg.service”. Tidak ada file unit yang memiliki nama itu, jadi kita dapat melanjutkan dan membuat file unit kita.
sudo gedit /etc/systemd/system/htg.service
Editor gedit akan terbuka. Salin dan tempel teks berikut ke editor:
[Unit]Description= Service ContohWants=network.targetAfter=syslog.target network-online.target[Service]Type=simpleExecStart=/usr/local/bin/htg .shRestart=on-failureRestartSec=10KillMode=process[Install]WantedBy=multi-user.target
Simpan perubahan Anda dan tutup editor.
Entri memiliki arti berikut. Ini adalah entri yang khas. Layanan sederhana kami sebenarnya tidak memerlukan sebagian besar darinya, tetapi menyertakannya memungkinkan kami menjelaskannya. NbspDeskripsi: Ini adalah deskripsi teks dari layanan Anda. Ingin: Layanan kami ingin — tetapi tidak memerlukan — jaringan sudah aktif sebelum layanan kami dimulai. After: Daftar nama unit yang harus dimulai setelah layanan ini berhasil dimulai, jika layanan tersebut belum berjalan. Jenis: Sederhana. systemd akan menganggap layanan ini dimulai segera setelah proses yang ditentukan oleh ExecStart telah di-fork. ExecStart: Jalur menuju proses yang harus dimulai. Mulai ulang: Kapan dan apakah layanan harus dimulai ulang. Kami telah menyetelnya ke “saat gagal”. RestartSec: Berapa lama menunggu sebelum mencoba memulai ulang layanan. Nilai ini dalam hitungan detik. KillMode: Mendefinisikan bagaimana systemd harus mematikan proses jika kita meminta systemctl untuk menghentikan layanan. Kami menyetelnya ke “proses”. Hal ini menyebabkan systemd menggunakan sinyal SIGTERM pada proses utama saja. Jika layanan kami adalah program non-sepele dan bukan skrip sederhana, kami akan menyetelnya ke “campuran” untuk memastikan bahwa setiap proses yang muncul juga dihentikan. WantedBy: Kami menetapkan ini ke “multi-user.target”, yang berarti layanan harus dimulai selama sistem berada dalam keadaan di mana banyak pengguna dapat masuk, baik antarmuka pengguna grafis tersedia atau tidak.
File unit tidak harus dapat dieksekusi, tetapi izin pada file unit harus membatasi siapa yang dapat mengeditnya. Anda tidak ingin pengguna jahat atau nakal mengubah file unit sehingga menjalankan program yang berbeda sama sekali.
Perintah ini akan memberikan izin membaca dan menulis kepada pemilik, dan izin membaca ke grup. Orang lain tidak akan memiliki izin.
sudo chmod 640 /etc/systemd/system/htg.service
Kita dapat meminta systemctl memeriksa sintaks file unit kita, bahkan jika layanan belum berjalan. Kesalahan apa pun akan dilaporkan. (Sebenarnya, bagian “.service” adalah opsional untuk sebagian besar perintah.)
systemctl status htg.service
Tidak ada kesalahan yang disorot, yang berarti file unit kami benar secara sintaksis.
Memulai Layanan Secara Otomatis dengan Perintah systemd
Saat Anda menambahkan file unit baru atau edit yang sudah ada, Anda harus memberi tahu systemd untuk memuat ulang definisi file unit.
sudo systemctl daemon-reload
Jika Anda ingin layanan diluncurkan saat startup, Anda harus mengaktifkannya:
sudo systemctl aktifkan htg
Mengaktifkan layanan tidak memulainya, itu hanya mengatur itu akan diluncurkan pada saat boot. Untuk memulai layanan sekarang, Anda harus menggunakan systemctl dengan opsi mulai.
sudo systemctl start htg
Memverifikasi Layanan
Setelah memulai layanan secara manual atau setelah me-reboot komputer, kami dapat memverifikasi bahwa layanan kami berjalan dengan benar.
sudo systemctl status htg.service
Status layanan ditampilkan untuk kami.
Titik hijau berarti layanan kami aktif dan berjalan dengan lancar. Nama layanannya adalah “htg.service”, dan deskripsi panjangnya adalah yang kami sediakan di file unit. Kami diperlihatkan file unit mana yang telah dimuat “/etc/systemd/system/htg.service”. Layanan ini aktif, dan waktu peluncuran layanan dicantumkan untuk kami. PID-nya adalah 7762. Ada dua tugas yang terkait dengan layanan ini. Total memori sebesar 928 Kibibyte digunakan oleh layanan ini. Grup kontrol mencakup skrip “htg.sh” dan perintah tidur, yang diluncurkan oleh “htg.sh.” Seringkali, perintah sleep akan melakukan pekerjaan untuk layanan ini.
Kami juga diperlihatkan 10 entri jurnal terakhir yang dihasilkan oleh layanan ini. Tidak mengherankan, semuanya berjarak satu menit.
Menghentikan dan Menonaktifkan Layanan
Jika Anda perlu menghentikan layanan, Anda dapat melakukannya dengan perintah ini:
sudo systemctl stop htg.service
Ini menghentikan layanan, tetapi tidak mencegahnya untuk memulai ulang berikutnya kali komputer di-reboot. Untuk menghentikan layanan yang diluncurkan saat startup, Anda harus menonaktifkannya:
sudo systemctl menonaktifkan htg.service
Jika layanan sedang berjalan, perintah ini tidak menghentikannya. Ini hanya memberitahu systemd untuk tidak meluncurkan layanan pada reboot berikutnya.
Jika Anda ingin menghentikan layanan dan mencegahnya diluncurkan saat startup, gunakan kedua perintah.
Tips Layanan
Pastikan program Anda berjalan seperti yang diharapkan sebelum Anda mencoba meluncurkannya sebagai service.
Linux Commands
Files
tar·pv·cat·tac·chmod·grep·diff·sed·ar·man·pushd·popd·fsck·testdisk·seq·fd·pandoc·cd·$PATH·awk·join·jq·fold· uniq·journalctl·tail·stat·ls·fstab·echo·less·chgrp·chown·rev·look·strings·type·rename·zip·unzip·mount·umount·install·fdisk·mkfs·rm·rmdir·rsync· df·gpg·vi·nano·mkdir·du·ln·patch·convert·rclone·shred·srm·scp·gzip·chattr·cut·find·umask·wc· tr
Processes
alias·screen·top·nice·renice·progress· strace·systemd·tmux·chsh·history·at·batch·free·which·dmesg·chfn·usermod·ps·chroot·xargs·tty·pinky·lsof·vmstat·timeout·wall·yes·kill·sleep·sudo· su·time·groupadd·usermod·groups·lshw·shutdown·reboot·halt·poweroff·passwd·lscpu·crontab·tanggal·bg·fg·pidof·nohup·pmap
Networking
netstat·ping·traceroute·ip·ss·whois·fail2ban· bmon·dig·finger·nmap·ftp·curl·wget·who·whoami·w·iptables·ssh-keygen·ufw·arping·firewalld