Systemd ile Başlangıçta Bir Linux Programı Nasıl Çalıştırılır
Yayınlanan: 2022-01-29Açılışta bir Linux programı başlatmanız mı gerekiyor? Systemd yazılımı, sistemd içeren herhangi bir Linux dağıtımında bunu yapmanın bir yolunu sunar; bu, Ubuntu da dahil olmak üzere bugünlerde çoğu budur. Entegre bir hizmet oluşturma sürecinde size yol göstereceğiz - ve hatta dergiyle konuşuyor.
Bu öğretici, sisteminizi başlattığınızda başlatılan bir sistem hizmetinin nasıl kurulacağını gösterir. Oturum açtığınızda bir grafik programı başlatmak için bunun yerine masaüstünüzün başlangıç yöneticisini kullanın.
Programları Başlangıçta Çalıştırmak
Bazen bilgisayarınıza yüklediğiniz yazılım, kendisini Linux başlatma sürecine bağlar, böylece bilgisayar her başlatıldığında program otomatik olarak başlatılır. Aynı davranışı kendi programlarınız ve komut dosyalarınızla veya aslında bilgisayarınızda bulunan herhangi bir programla kolayca gerçekleştirebilirsiniz.
Başlangıçta başlatılan programlar systemd
, sistem ve servis yöneticisi tarafından kontrol edilir. systemd
, başlangıçta çalıştırılan ilk işlemdir. Her zaman işlem kimliğine (PID) sahiptir 1. Bilgisayarınızda çalışan diğer tüm işlemler systemd
tarafından veya systemd
zaten başlattığı bir işlem tarafından başlatılır.
Arka planda çalışan programlara arka plan programı veya hizmetler denir. systemd
sonundaki "d" arka plan programı anlamına gelir. Bu yazımızda örnek bir servis oluşturacağız. Tüm kutuları işaretlemek için hizmetimiz şu şekilde olmalıdır:
- Bir hizmet birimi dosyası aracılığıyla
systemd
ile entegre - Başlangıçta başlatıldı
-
systemctl
kullanılarak kontrol edilebilir,systemd
için kontrol arayüzü - Dergiye yazabilecek
Servis Programının Oluşturulması
systemd
başlatacağı bir programa ihtiyacımız var. “htg.sh” adında basit bir komut dosyası oluşturacağız. Bu öğretici, Gedit metin düzenleyicisini kullanır, ancak tercih ettiğiniz herhangi bir metin düzenleyiciyi kullanabilirsiniz.
htg.sh'ye dokunun
gedit htg.sh
gedit
editörü açılacaktır. Aşağıdaki metni kopyalayıp düzenleyiciye yapıştırın.
#!/bin/bash echo "htg.service: ## Başlangıç ##" | systemd-cat -p bilgisi sırasında : yapmak TIMESTAMP=$(tarih '+%Y-%m-%d %H:%M:%S') echo "htg.service: zaman damgası ${TIMESTAMP}" | systemd-cat -p bilgisi uyku 60 tamamlamak
Değişikliklerinizi kaydedin ve düzenleyiciyi kapatın.
Senaryo pek bir şey yapmıyor, ancak kayda değer birkaç nokta var.
- İki
echo
satırı, bir programdan çıktıyı alan ve günlüğe gönderen bir program olansystemd-cat
aracılığıyla iletilir. Dergiye girişlere öncelik verilir. Mesajlarımızın yalnızca bilgi (bilgi) amaçlı olduğunu belirtmek için-p
(öncelik) seçeneğini kullanıyoruz. Önemli hatalar veya uyarılar değiller. - Sonsuz bir
while
döngüsü vardır. -
TIMESTAMP
değişkeni geçerli tarih ve saate ayarlanır. Bu bir mesaj olarak biçimlendirilir ve dergiye gönderilir. - Komut dosyası daha sonra 60 saniye uyur.
- 60 saniye sonra döngü tekrarlanır. Böylece, bu komut dosyası, günlüğe dakikada bir kez zaman damgalı bir mesaj yazar.
Komut dosyasını /usr/local/bin
dizinine kopyalayacağız.
sudo cp htg.sh /usr/local/bin
Ve onu çalıştırılabilir hale getirmemiz gerekiyor:
sudo chmod +x /usr/local/bin/htg.sh
Hizmet Birimi Dosyasını Oluşturma
systemd
tarafından başlatılan her programın, hizmet birimi dosyası adı verilen bir tanım dosyası vardır. Bu, systemd
programı bulmak ve başlatmak ve bazı davranışlarını tanımlamak için kullanabileceği belirli öznitelikleri içerir.
Yeni hizmetimiz için bir birim dosyası oluşturmamız gerekiyor, ancak mevcut birim dosyalarından hiçbirinin yeni hizmetimize vermek istediğimiz isme sahip olmadığından emin olmakta fayda var.
sudo systemctl liste-birim dosyaları --type-service
Alfabetik olarak sıralanmış birim dosyaları listesinde gezinebilir ve kullanmak istediğiniz ismin alınmadığını kontrol edebilirsiniz.
Hizmetimizin adı “htg.service” olacak. Hiçbir birim dosyası bu ada sahip değildir, bu nedenle devam edip birim dosyamızı oluşturabiliriz.
sudo gedit /etc/systemd/system/htg.service
gedit
editörü açılacaktır. Aşağıdaki metni kopyalayıp düzenleyiciye yapıştırın:
[Birim] Açıklama=Nasıl Yapılır Geek Hizmeti Örneği Wants=network.hedef After=syslog.target network-online.target [Hizmet] Tip=basit ExecStart=/usr/local/bin/htg.sh Yeniden başlat=başarısızlık durumunda Yeniden BaşlatSn=10 KillMode=süreç [Düzenlemek] WantedBy=çok kullanıcılı.hedef
Değişikliklerinizi kaydedin ve düzenleyiciyi kapatın.
Girişler bu anlamlara sahiptir. Bunlar tipik girişlerdir. Basit servisimiz aslında çoğuna ihtiyaç duymaz, ancak bunları dahil etmek onları açıklamamıza izin verir.
- Açıklama: Bu, hizmetinizin metin açıklamasıdır.
- İstekler: Hizmetimiz, hizmet başlamadan önce ağın açık olmasını istiyor - ancak bunu gerektirmiyor.
- Sonra: Henüz çalışmıyorlarsa, bu hizmet başarıyla başlatıldıktan sonra başlatılması gereken birim adlarının listesi.
- Tür: Basit.
systemd
,ExecStart
tarafından belirtilen işlem çatallanır ayrılmaz bu hizmetin başladığını kabul eder. - ExecStart: Başlatılması gereken işlemin yolu.
- Yeniden Başlat: Hizmetin ne zaman ve yeniden başlatılması gerekip gerekmediği. Bunu "arıza durumunda" olarak ayarladık.
- RestartSec: Hizmeti yeniden başlatmaya çalışmadan önce ne kadar bekleneceği. Bu değer saniye cinsindendir.
- KillMode:
systemctl
hizmeti durdurmasını isterseksystemd
işlemi nasıl sonlandıracağını tanımlar. Bunu “süreç” olarak ayarladık. Bu,systemd
yalnızca ana işlemdeSIGTERM
sinyalini kullanmasına neden olur. Hizmetimiz basit bir komut dosyası yerine önemsiz olmayan bir program olsaydı, ortaya çıkan işlemlerin de sonlandırıldığından emin olmak için bunu "karma" olarak ayarlardık. - WantedBy: Bunu “multi-user.target” olarak ayarladık, yani sistem, grafik kullanıcı arayüzü olsun veya olmasın, birden fazla kullanıcının oturum açabileceği bir durumda olduğu sürece hizmetin başlatılması gerektiği anlamına gelir.
Birim dosyasının yürütülebilir olması gerekmez, ancak birim dosyasındaki izinler, onu kimlerin düzenleyebileceğini kısıtlamalıdır. Kötü niyetli veya yaramaz bir kullanıcının birim dosyasını tamamen farklı bir programı çalıştıracak şekilde değiştirmesini istemezsiniz.
Bu komut, sahibine okuma ve yazma izinleri ve gruba okuma izinleri verir. Diğerlerinin hiçbir izni olmayacaktır.
sudo chmod 640 /etc/systemd/system/htg.service
Servis henüz çalışmıyor olsa bile, systemctl
birim dosyamızın sözdizimini bizim için kontrol etmesini sağlayabiliriz. Herhangi bir hata rapor edilecektir. (Aslında, çoğu komut için “.service” kısmı isteğe bağlıdır.)
systemctl durumu htg.service
Hiçbir hata vurgulanmamıştır, bu da birim dosyamızın sözdizimsel olarak doğru olduğu anlamına gelir.
Hizmeti Başlatmak
Yeni bir birim dosyası eklediğinizde veya mevcut olanı düzenlediğinizde, systemd
birim dosyası tanımlarını yeniden yüklemesini söylemelisiniz.
sudo systemctl arka plan programı yeniden yükleme
Bir hizmetin başlangıçta başlatılmasını istiyorsanız, onu etkinleştirmeniz gerekir:
sudo systemctl htg'yi etkinleştir
Bir hizmeti etkinleştirmek onu başlatmaz, yalnızca önyükleme zamanında başlatılacak şekilde ayarlar. Hizmeti şimdi başlatmak için start
seçeneği ile systemctl
kullanmanız gerekir.
sudo systemctl htg'yi başlat
Hizmeti Doğrulamak
Hizmeti manuel olarak başlattıktan veya bilgisayarı yeniden başlattıktan sonra hizmetimizin doğru çalıştığını doğrulayabiliriz.
sudo systemctl durumu htg.service
Hizmetin durumu bizim için görüntülenir.
- Yeşil nokta, hizmetimizin sorunsuz çalıştığı ve sorunsuz çalıştığı anlamına gelir.
- Hizmetin adı “htg.service” ve uzun açıklama birim dosyasında verdiğimiz açıklamadır.
- Hangi birim dosyasının yüklendiği “/etc/systemd/system/htg.service” olarak gösteriliyor.
- Hizmet aktif ve hizmetin başlatıldığı saat bizim için listeleniyor.
- PID'si 7762'dir.
- Hizmetle ilişkili iki görev vardır.
- Hizmet tarafından toplam 928 Kibibayt bellek kullanılıyor.
- Kontrol grubu, “htg.sh” komut dosyasını ve “htg.sh” tarafından başlatılan
sleep
komutunu içerir. Çoğu zaman bu hizmet içinsleep
komutu işi yapacaktır.
Ayrıca, bu hizmet tarafından üretilen son 10 günlük girdisini de gösteriyoruz. Şaşırtıcı olmayan bir şekilde, hepsi birer dakika arayla.
Hizmeti Durdurma ve Devre Dışı Bırakma
Hizmeti durdurmanız gerekirse, bunu şu komutla yapabilirsiniz:
sudo systemctl htg.service'i durdur
Bu, hizmeti durdurur, ancak bilgisayar yeniden başlatıldığında yeniden başlatılmasını engellemez. Hizmetin başlangıçta başlatılmasını durdurmak için devre dışı bırakmanız gerekir:
sudo systemctl htg.service'i devre dışı bırak
Hizmet çalışıyorsa, bu komut onu durdurmaz. Yalnızca systemd
hizmeti bir sonraki yeniden başlatmada başlatmamasını söyler.
Hizmeti durdurmak ve başlangıçta başlatılmasını önlemek istiyorsanız, her iki komutu da kullanın.
Servis İpucu
Bir hizmet olarak başlatmayı denemeden önce programınızın beklendiği gibi çalıştığından emin olun.
Linux Komutları | ||
Dosyalar | tar · pv · kedi · tac · chmod · grep · diff · sed · ar · adam · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · birleştirme · jq · katlama · uniq · dergictl · kuyruk · stat · ls · fstab · yankı · daha az · chgrp · chown · rev · bak · diziler · tür · yeniden adlandır · zip · unzip · mount · umount · yükle · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · yama · dönüştürmek · rclone · parçalamak · srm | |
süreçler | takma ad · ekran · üst · güzel · renice · ilerleme · strace · systemd · tmux · chsh · geçmiş · at · toplu · ücretsiz · hangi · dmesg · chfn · usermod · ps · chroot · xargs · tty · pembemsi · lsof · vmstat · zaman aşımı · duvar · evet · öldür · uyku · sudo · su · zaman · groupadd · usermod · gruplar · lshw · kapatma · yeniden başlatma · durdurma · güç kapatma · passwd · lscpu · crontab · tarih · bg · fg | |
ağ | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · kazmak · parmak · nmap · ftp · curl · wget · kim · whoami · w · iptables · ssh-keygen · ufw |
İLGİLİ: Geliştiriciler ve Meraklılar için En İyi Linux Dizüstü Bilgisayarlar