Our Blog

CentOS / RHEL’de Servisler ve Komut Dosyası Başlangıcı Nasıl Yönetilir?

by imleme
imleme.com

Bu makalede, hizmetleri ve komut dosyalarını Linux CentOS / RHEL 7 / 8’de otomatik olarak başlayacak şekilde yapılandırmanın temellerini öğreneceğiz. Özellikle, sistem arka plan programı ile tanışacağız , hizmetlerin nasıl ekleneceğini veya başlangıçtan nasıl kaldırılacağını öğreneceğiz ve Linux’ta önyükleme sırasında komut dosyalarını veya arka plan yordamlarını başlatmanın alternatif yollarını keşfedeceğiz.

Makalenin amacı, size Linux’ta otomatik olarak başlatılan hizmetlerin veya komut dosyalarının listesini hızlı bir şekilde bulmayı, hizmetlerinizi veya komut dosyalarınızı başlatmak için eklemeyi veya bazı uygulamaların otomatik başlatılmasını devre dışı bırakmayı öğretmeyi amaçlamaktadır.

Linux’ta Sisteminde Hizmetlerini Yönetmek için Systemctl Kullanma
En popüler Linux dağıtımları (CentOS, RHEL, Debian, Fedora ve Ubuntu) , init.d yerine sistem başlangıç ​​arka plan programını kullanır . Sistem , diğer arka plan yordamlarını başlatmak ve yönetmek için kullanılan bir Linux hizmet yöneticisidir. ( İnit.d’nin kullandığı betiklerden ) birim dosyalarını kullanır . Sistem, işletim sistemi önyüklemesinde hizmet başlangıcını paralel hale getirmenize izin verir./etc/systemd/system/etc/init.d/

Systemd’yi yönetmek için systemctl komutu kullanılır.

Her şeyden önce, sistemi başlattıktan sonra, sistemde’de bulunan birimlerin listesini kontrol edeceğiz :

systemctl list-units

systemctl list-units

Bu komutu kullanarak birim dosyalarının listesini alabilirsiniz:

systemctl list-unit-files

Bu komut, mevcut tüm birim dosyalarını gösterecektir .

Etkin hizmetlerin listesini ve durumlarını görüntülemek için şu komutu çalıştırın:

# systemctl list-units -t service

Bazı birimler başlangıçtan sonra pasif hale gelebileceğinden, —all seçeneğini kullanarak tam listeyi alabilirsiniz .

# systemctl list-units --all

BİRİM YÜKÜ AKTİF 
ABONELİK AÇIKLAMA proc-sys-fs-binfmt_misc.automount yüklü aktif bekleme ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
● exim.service bulunamadı inaktif ölü exim. service 
firewalld.service yüklü aktif çalışan firewalld - dinamik güvenlik duvarı daemon 
getty@tty1.service yüklü aktif çalışan Getty on tty1 
● iptables.service not-found inactive dead iptables.service 
Ağ kurma / aşağı açma 
● NetworkManager-wait-online.service not- inaktif ölü bulundu
Listeden de görebileceğiniz gibi, diskte bulunmayan servisler bile görüntüleniyor.
Ayrıca, başka işaretler de kullanabilirsiniz, örneğin:
—State - arka plan programı durumunu tespit etmek için kullanılır: Load, Active, Sub
—Tip - birimleri türe göre filtrelemeye izin verir
Örnekler:
systemctl list-units --all --state=active —Yalnızca aktif sistem birimlerinin listesini görüntüleyin
systemctl list-units —type=service - hizmetler olan birimlerin listesini görüntüleyin
systemctl list-units

Systemd’de Hizmet Nasıl Oluşturulur?

Systemd, hizmetleri yönetmek için özel bir sözdizimi kullanıyor. Bir hizmetin adından sonra .service eklemelisiniz . Örneğin:

# systemctl enable nginx.service – komut, nginx web sunucusunu başlangıca ekler

Bu komut, systemd başlangıç ​​dizinindeki servis komutunda belirtilen bir dosyaya sembolik bir bağlantı oluşturacaktır .

# systemctl enable nginx.service

/Etc/systemd/system/multi-user.target.wants/nginx.service'den /usr/lib/systemd/system/nginx.service'e symlink oluşturuldu

Komutun çıktısı, hizmet dosyasına sembolik bağın oluşturulduğu dizini gösterir.

Bir hizmetin başlangıca eklenip eklenmediğini kontrol etmek için durumunu öğrenebilirsiniz:

systemctl status nginx.service

Çıktıda aşağıdaki satıra dikkat edin:

Yüklendi: yüklendi (/usr/lib/systemd/system/nginx.service; etkin; satıcı ön ayarı: devre dışı)

Etkin Bu hizmet Linux başlangıçta eklendiğini değeri ne anlama gelir. Hizmet otomatik olarak başlamazsa, burada devre dışı olduğunu göreceksiniz .

Systemd’de Bir Hizmet Nasıl Devre Dışı Bırakılır?

Bir hizmeti başlangıçtan kaldırabilirsiniz, böylece Linux önyüklemesinde başlatılmaz (hizmetin kendisi kaldırılmazken). Bir hizmetin başlatılmasını devre dışı bırakmak için aşağıdaki komutu çalıştırın:

# systemctl disable your_service

Örneğin, nginx otomatik başlatmayı devre dışı bırakmak için:

# systemctl disable nginx.service

Symlink /etc/systemd/system/multi-user.target.wants/nginx.service kaldırıldı

Bunu yaptıktan sonra, bir hizmet dosyasına olan sembolik bağlantı systemd dizininden kaldırılacaktır. Hizmetin otomatik olarak başlatıldığından emin olabilirsiniz:

# systemctl is-enabled nginx

Systemd ile Birimler Nasıl Maskelenir?

Devre dışı bıraktıktan sonra hala başlangıçta kalan ve Linux yeniden başlatıldıktan sonra başlayan bazı kötü hizmetlerle karşılaştım. Bu sorunu çözmek için bir hizmeti maskeleyebilirsiniz:

# systemctl mask nginx.service

Ardından manuel olarak veya işletim sistemi yeniden başlatıldıktan sonra başlamaz:

# systemctl mask nginx.service

/Etc/systemd/system/nginx.service'den / dev / null'a symlink oluşturuldu.

# service nginx restart

/ Bin / systemctl yeniden başlatılıyor nginx.service nginx.service yeniden 
başlatılamadı: Birim maskelenmiştir.

Bu komutu kullanarak bir hizmetin maskesini kaldırabilirsiniz:

# systemctl unmask nginx.service

Symlink /etc/systemd/system/nginx.service kaldırıldı.

Bir servisi maskeledikten sonra birim dosyalarınızı kontrol ederseniz, servisin maskelenmiş olarak işaretlendiğini göreceksiniz :

Komut Dosyası veya Hizmeti Rc.local ile Çalıştırın

Linux önyüklemesinde farklı komut dosyalarını çalıştırmak için genellikle rc.local kullanılır.

Komut dosyalarının yanı sıra, rc.local kullanarak, systemd kullanılarak başlatılanlar bile hizmetleri çalıştırabilirsiniz . Systemd varsa neden rc.local kullanmanız gerektiğini bilmiyorum, ama işte birkaç örnek.

Öncelikle /etc/rc.local çalıştırılabilir olmalıdır:

chmod +x /etc/rc.local

Rc.local, systemd autostart’a eklenmelidir:

systemctl enable rc-local

Ve nginx web sunucusunu rc.local’a başlatmak için bir komut ekleyebiliriz :

service nginx start

Ancak hizmetleri başlatmak için nadiren rc.local kullanıyorum . Daha sık olarak rc.local, bir komut dosyasını başlatmak veya bir komutu bir kez çalıştırmak için kullanılır.

Örneğin, bir şeyler yapan bir /root/test.sh betiği oluşturdum ve onu önyüklemeden hemen sonra çalıştırmak istiyorum. Aşağıdaki satırı rc.local dosyasına ekleyin:

sh /root/test.sh

CentOS 7’den başlayarak, geliştiriciler rc.local’ın eski bir arka plan programı olduğunu ve komut dosyalarını veya hizmetleri başlatmak için kullanılması tavsiye edilmediğini belirtiyorlar. Ama hala çalışırken kullanıyorum çünkü çok basit.

Systemd ile Linux Hizmeti Nasıl Oluşturulur?

Kendi artalan sürecinizi oluşturabilir ve systemd üzerinden yönetebilirsiniz .

Örneğin , sistem her yeniden başlatıldığında aynı betiği ( /root/test.sh ) başlatmak istiyorsunuz . Yeni hizmetimizin bir dosyasını oluşturarak başlayalım:

touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

İşte dosyanın içeriği:

[Birim] 
Açıklama = Şablon Ayarları Servis 
Sonrası = network.target 
[Servis] 
Tür = oneshot 
Kullanıcı = root 
ExecStart = / root / test.sh 
[Kur] 
WantedBy = multi-user.target

Ana parametreler:

User – arka plan programının başlatıldığı bir kullanıcı hesabı

Type=oneshot – systemd, diğer birimlerle devam etmeden önce sürecin bitmesini beklemelidir.

Kontrol edin ve yeniden başlatın:
# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service

● test-script.service - Test 
Yüklendi: yüklendi (/etc/systemd/system/test-script.service; devre dışı; satıcı ön ayarı: devre dışı) 
Aktif: etkin (çalışıyor)

Hizmet iyi çalışıyorsa, onu sistem başlangıcına ekleyin:

# systemctl enable test-script.service

/Etc/systemd/system/multi-user.target.wants/test-script.service'den /etc/systemd/system/test-script.service'e symlink oluşturuldu.

Böylece, otomatik başlatmak için herhangi bir komut dosyası ekleyebilir ve bunları systemd üzerinden yönetebilirsiniz.

Cron Kullanarak Komut Dosyaları Nasıl Çalıştırılır?

Bir komut dosyası veya komutu belirli bir sıklıkta çalıştırmak istiyorsanız, cron’u kullanabilirsiniz :

crontab -e – cron görev tablosunu değiştirmek için bir düzenleyici açar

Ve buraya istediğiniz bir görevi ekleyin, örneğin:

* * * * * /root/test.sh – dakikada bir komut dosyası çalıştırmak için.

Bir hizmet durumunu kontrol edecek bir bekçi betiği yazabilirsiniz ve hizmet çalışmıyorsa, betik onu başlatacaktır. Bazı projelerimde de benzer bir yol kullanıyorum.

Tüm görevlerin listesini cron’da görüntülemek için şu komutu çalıştırın:

# crontab -l

* * * * * /root/test.sh

Cron görevlerini sırayla çalıştırmak için mevcut zaman değerleri:

  • Dakika: 0-59
  • Saatler: 0-59
  • Bir ayın günü: 1-31
  • Ay: 1-12
  • Haftanın günü: 0-7 (0 veya 7 Pazar)

Görevimizde, komut dosyası dakikada bir çalıştırılır, bu nedenle orada * yıldız işaretleri * vardır.

Ayrıca betiği cron dizinlerinden birine de yerleştirebilirsiniz :

  • /cron.daily – günde bir kez çalıştırılan bir komut dosyası için
  • /cron.hourly – saatte bir çalıştırılan bir komut dosyası için
  • /cron.monthly – ayda bir kez çalıştırılan bir komut dosyası için
  • /cron.weekly – haftada bir çalıştırılan bir komut dosyası için

Belirtilen dizinlerdeki komut dosyaları otomatik programa göre çalıştırılacaktır.

Bash Başlangıç ​​Komut Dosyaları: .bashrc

SSH konsolunu başlatırken bazı eylemler gerçekleştirmek istiyorsanız, .bash_profile veya .bashrc dosyasına herhangi bir komut veya komut dosyası ekleyebilirsiniz . Teorik olarak, bu dosyalardan herhangi birine bir eylem ekleyebilirsiniz, her durumda çalıştırılacaktır. Genellikle ihtiyacınız olan şeyler .bashrc’ye eklenir ve .bashrc .bash_profile’dan başlatılır.

.Bashrc dosyasına nginx web hizmetini yeniden başlatmak için bir komut ekledim:

service nginx restart

Sonra dosyayı kaydettim ve SSH oturumunu yeniden başlattım:

Gördüğünüz gibi, terminal başlatılırken web sunucusu da yeniden başlatıldı. Terminali başlatırken hangi eylemler gerçekleştirilebilir? Çalışma zamanı sunucu denetimi gibi bazı ekstra araçlar olabilir :

Veya belirli bir dizine gitmek ve ssh konsolunu çalıştırırken mc’yi başlatmak istiyorsanız , aşağıdakileri .bashrc’ye ekleyin :

cd /var/
mc

Umarım, Linux hizmetini veya Linux’ta komut dosyası başlangıcını nasıl yöneteceğiniz hakkındaki bu makale size yardımcı olmuştur (bu makale CentOS ve RHEL için yazılmıştır, ancak diğer distolar için uygundur). Eminim ki bu bilgiler Linux sistem yönetiminin temellerini inceleyen insanlar için kullanışlı olacaktır.

Share


One comment on “CentOS / RHEL’de Servisler ve Komut Dosyası Başlangıcı Nasıl Yönetilir?”

  1. Pingback:

Your nameYour emailYour text

Leave a Reply

Slider widget

Categories

Log in
Register
Send message