Cara Menjalankan Program Linux saat Startup dengan systemd
Diterbitkan: 2022-01-29Perlu meluncurkan program Linux saat boot? Perangkat lunak systemd menyediakan cara untuk melakukannya di distro Linux apa pun dengan systemd — yang kebanyakan dari mereka akhir-akhir ini, termasuk Ubuntu. Kami akan memandu Anda melalui proses pembuatan layanan terintegrasi—dan bahkan berbicara dengan jurnal.
Tutorial ini menunjukkan cara menyiapkan layanan sistem yang diluncurkan saat Anda memulai sistem. Untuk meluncurkan program grafis saat Anda masuk, gunakan manajer pengaktifan desktop sebagai gantinya.
Menjalankan Program di Startup
Kadang-kadang perangkat lunak yang Anda instal di komputer Anda terhubung sendiri ke dalam proses startup Linux, sehingga program secara otomatis diluncurkan setiap kali komputer dinyalakan. Anda dapat dengan mudah mencapai perilaku yang sama ini dengan program dan skrip Anda sendiri, atau bahkan program lain apa pun yang ada di komputer Anda.
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 untuksystemd
- Mampu menulis ke jurnal
Membuat Program Layanan
Kita perlu 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 inginkan.
sentuh htg.sh
gedit htg.sh
Editor gedit
akan terbuka. Salin dan tempel teks berikut ke dalam editor.
#!/bin/bash echo "htg.service: ## Mulai ##" | systemd-cat -p info ketika : melakukan TIMESTAMP=$(tanggal '+%Y-%m-%d %H:%M:%S') echo "htg.service: stempel waktu ${TIMESTAMP}" | systemd-cat -p info tidur 60 selesai
Simpan perubahan Anda dan tutup editor.
Script tidak melakukan banyak hal, tetapi ada beberapa poin yang perlu diperhatikan.
- Dua baris
echo
disalurkan melaluisystemd-cat
, sebuah program yang mengambil output dari sebuah program dan mengirimkannya ke jurnal. Entri ke jurnal diberikan prioritas. Kami menggunakan opsi-p
(priority) untuk menunjukkan bahwa pesan kami hanya untuk informasi (info). Itu bukan kesalahan atau peringatan penting. - Ada loop
while
tak berujung. - Variabel
TIMESTAMP
diatur ke tanggal dan waktu saat ini. Ini diformat menjadi pesan dan dikirim ke jurnal. - Script kemudian tidur selama 60 detik.
- Setelah 60 detik, loop diulang. Jadi, skrip ini menulis pesan berstempel waktu ke jurnal sekali per menit.
Kami akan menyalin skrip ke /usr/local/bin
.
sudo cp htg.sh /usr/local/bin
Dan kita perlu membuatnya dapat dieksekusi:
sudo chmod +x /usr/local/bin/htg.sh
Membuat File Unit Layanan
Setiap program yang dijalankan oleh systemd
memiliki file definisi, yang disebut file unit layanan. Ini memegang atribut tertentu yang dapat digunakan systemd
untuk mencari dan meluncurkan program, dan untuk menentukan beberapa perilakunya.
Kami perlu membuat file unit untuk layanan baru kami, tetapi sebaiknya pastikan tidak ada file unit yang ada yang memiliki nama yang ingin kami berikan untuk layanan baru kami.
sudo systemctl list-unit-files --type-service
Anda dapat menggulir daftar file unit, yang diurutkan menurut 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 kami dapat melanjutkan dan membuat file unit kami.
sudo gedit /etc/systemd/system/htg.service
Editor gedit
akan terbuka. Salin dan tempel teks berikut ke dalam editor:
[Satuan] Description=Contoh Layanan How-To Geek Ingin=jaringan.target After=syslog.target network-online.target [Melayani] Jenis = sederhana ExecStart=/usr/local/bin/htg.sh Mulai ulang = saat gagal RestartSec=10 KillMode=proses [Install] WantedBy=multi-pengguna.target
Simpan perubahan Anda dan tutup editor.
Entri memiliki arti ini. Ini adalah entri khas. Layanan sederhana kami sebenarnya tidak membutuhkan sebagian besar dari mereka, tetapi memasukkannya memungkinkan kami untuk menjelaskannya.
- Deskripsi: Ini adalah deskripsi teks dari layanan Anda.
- Diinginkan: Layanan kami menginginkan—tetapi tidak memerlukan—jaringan harus aktif sebelum layanan kami dimulai.
- Setelah: Daftar nama unit yang harus dimulai setelah layanan ini berhasil dimulai, jika belum berjalan.
- Jenis: Sederhana.
systemd
akan mempertimbangkan layanan ini dimulai segera setelah proses yang ditentukan olehExecStart
telah bercabang. - ExecStart: Jalur ke proses yang harus dimulai.
- Mulai ulang: Kapan dan jika layanan harus dimulai ulang. Kami telah mengaturnya ke "kegagalan."
- RestartSec: Berapa lama menunggu sebelum mencoba me-restart layanan. Nilai ini dalam hitungan detik.
- KillMode: Mendefinisikan bagaimana
systemd
harus menghentikan proses jika kita memintasystemctl
untuk menghentikan layanan. Kami mengatur ini ke "proses." Hal ini menyebabkansystemd
menggunakan sinyalSIGTERM
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 memiliki set ini ke "multi-user.target", yang berarti layanan harus dimulai selama sistem dalam keadaan di mana banyak pengguna dapat masuk, apakah antarmuka pengguna grafis tersedia atau tidak.
File unit tidak perlu 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 memberi pemilik izin baca dan tulis, dan izin baca ke grup. Orang lain tidak akan memiliki izin.
sudo chmod 640, /etc/systemd/system/htg.service
Kami dapat meminta systemctl
memeriksa sintaks file unit kami untuk kami, bahkan jika layanan belum berjalan. Setiap kesalahan 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 secara sintaksis benar.
Memulai Layanan
Saat Anda menambahkan file unit baru atau mengedit 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 mengaturnya untuk diluncurkan pada saat boot. Untuk memulai layanan sekarang , Anda harus menggunakan systemctl
dengan opsi start
.
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 ditunjukkan file unit mana yang telah dimuat "/etc/systemd/system/htg.service".
- Layanan aktif, dan waktu layanan diluncurkan terdaftar untuk kami.
- PID-nya adalah 7762.
- Ada dua tugas yang terkait dengan layanan.
- Sebanyak 928 Kibibyte memori sedang digunakan oleh layanan ini.
- Grup kontrol menyertakan skrip "htg.sh" dan perintah
sleep
, yang telah diluncurkan oleh "htg.sh." Sebagian besar waktu, perintahsleep
akan melakukan pekerjaan untuk layanan ini.
Kami juga diperlihatkan 10 entri jurnal terakhir yang dihasilkan oleh layanan ini. Tidak mengherankan, mereka semua hanya 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 memulai ulang saat komputer di-boot ulang lagi. Untuk menghentikan layanan yang diluncurkan saat startup, Anda harus menonaktifkannya :
sudo systemctl nonaktifkan 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.
Tip Layanan
Pastikan program Anda berjalan seperti yang diharapkan sebelum Anda mencoba meluncurkannya sebagai layanan.
Perintah Linux | ||
File | 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 · ketik · ganti nama · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · konversi · rclone · rusak · srm | |
Proses | alias · layar · atas · bagus · renice · kemajuan · strace · systemd · tmux · chsh · sejarah · di · batch · gratis · yang · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · batas waktu · dinding · ya · bunuh · tidur · sudo · su · waktu · groupadd · usermod · grup · lshw · shutdown · reboot · hentikan · matikan · passwd · lscpu · crontab · tanggal · bg · fg | |
Jaringan | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
TERKAIT: Laptop Linux Terbaik untuk Pengembang dan Penggemar