/Etc/rc.local'ın amacı ve tipik kullanımı


73

Başlık şöyle görünür:

#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.

Bu dosyanın sebebi nedir (çok fazla içermiyor) ve genellikle hangi komutları koyarsınız? "Çok kullanıcılı çalışma seviyesi" nedir? ( rc"Komutları çalıştır" sanırım ?)


2
Bu dosyanın "resmi" amaç ise bilmiyorum, ama ben başlangıçta ne olacağına ilişkin dosyayı kullanabilir ve süper kullanıcı erişimi gerektirir, ama öğrendim olmadan şifre sağlamak zorunda. Bu genellikle renkleri, klavyeyi ve benzeri şeyleri içerir. Burada bazı örnekler göz atın .
Emanuel Berg

Yanıtlar:


66

Çalışma seviyesi sistemin önyükleme ya da yeniden başlatma ya da kapatma ya da tek kullanıcılı modunda ya da normal şekilde çalışmakta olup olmadığını gösteren bir durumdur. Geleneksel init programı bu işlemleri ilgili çalışma seviyesine geçerek gerçekleştirir. Linux altında, çalışma seviyeleri kurallara göredir :

  • Önyüklerken S,
  • Kapatılırken 0,
  • 6 yeniden başlatırken,
  • 1 tek kullanıcı modunda ve
  • Normal işletimde 2 ila 5 arası.

2'den 5'e kadar olan çalışma seviyeleri çok kullanıcılı çalışma seviyeleri olarak bilinir, çünkü yalnızca sistem yöneticisi için tasarlanan çalışma seviyesi 1'den farklı olarak birden fazla kullanıcının oturum açmasına izin verir.

Çalışma seviyesi değiştiğinde, init rc scriptleri çalıştırır (geleneksel init olan sistemlerde - Upstart ve Systemd gibi alternatifler vardır ). Bu rc betikleri tipik olarak sistem hizmetlerini başlatır ve durdurur ve dağıtım tarafından sağlanır.

Betik /etc/rc.localsistem yöneticisi tarafından kullanılmak içindir. Geleneksel olarak, tüm normal sistem hizmetleri başlatıldıktan sonra, çok kullanıcılı bir çalışma seviyesine geçme işleminin sonunda gerçekleştirilir. Özel bir servisi başlatmak için kullanabilirsiniz, örneğin yüklü olan bir sunucuyu /usr/local. Çoğu kurulum gerekmez /etc/rc.local, ihtiyaç duyulan durumlarda azınlık için sağlanır.


2
Bugün FreeBSD’de, rc.local’ın oldukça erken idam edilebileceğini öğrendim. Kesinlikle tüm normal sistem hizmetleri başladıktan sonra değil. Başsız bir makineye sshd erişimi mümkün olduğunda ve rc.localbu nedenle uygun olmadığında bir bip sesi istedim . Asıl soru Debian'la ilgili olduğu için, bu yorum OP için muhtemelen önemsizdir.
MvG

1
@MvG Bilgi için teşekkürler. rc.localgeleneksel olarak en son koşuldu, ancak FreeBSD'nin bağımlılık tabanlı bir sisteme geçtiklerinde bunu yapmayı bıraktığını görüyorum. Bile, Bak rc.localsonra başlatıldığı /etc/rc.d/sshd, bu mükemmel işe yaramaz: rc.localhemen sonra çağrılan olacağını sshdsüreç başlatılmıştır, daha önce çağırılacak sshd(ağa dinlemeye başlamıştı ama biz de saniyenin onda konuşurdu çoğu tipik kurulumda).
Gilles

Bunu, lxc konteynerleri için ağ kurmak ve onları otomatik olarak başlatmak için kullanmaya çalışıyorum. Ama sonra durur iptables-apply /root/iptables. Neyin yanlış olduğunu bulma sürecindeyim (bir sonraki yeniden başlatmayı bekliyorum). Ama herhangi bir önerin varsa, ben tamamen kulaklarım.
x-yuri

1
@ x-yuri Bu, burada yayınladığınızdan çok daha fazla bilgi gerektirir. "Duruyor" da "ne" olduğunu bile bilmiyorum. Ne yaptığınızı açıklayan yeni bir soru sorun.
Gilles

14

rc "çalıştırma kontrolünü" belirtir,

Çalışma multiuserseviyesi, ağ bağlantısının mümkün olduğu seviye olarak tanımlanacak ve bu nedenle sunucuya bağlantıların, bu hizmetleri kullanarak kablolu kablolu bağlantıların yerine yapılabilmesi sağlandı.

Sunucular, genellikle ağ bağlantılarını destekleyen bir servis işlemcisi tarafından yönetilir (çeşitli adlar altında) ve sırayla gerçekten kablolu bir konsola sahipmiş gibi davranır.

rc.localDosyaya gelince , bu, başlatmak istediğiniz tüm "yerel" (siteye özgü) nesnelerin (daemonlar ve / veya önyüklemede bir kez komut dosyaları) belirtilmesini sağlayan bir kolaylıktır. Bu paradigmayı kullanmayı veya aslında '/etc/init.d' dosyasını start / stop betikleriyle uygun şekilde doldurmayı seçebilirsiniz.


1
Tamam, peki neden dosya orada ve ne zaman kullanıyorsunuz ve nasıl (örneğin, hangi komutları koymak mantıklı)?
Emanuel Berg

4

Genelde iki şey için kullanıyorum:

  1. Her yeniden başlatmanın tarihini ve çekirdek sürümünü kaydetmek için. Etrafa tıkanmadan sistemlere kolayca eklenebilen basit bir astar ... ve önyükleme geçmişine koşmaktan daha az zarar görebilir uptimed.

  2. Birkaç yıl öncesine kadar debianda bulunan eski /etc/rc.boot/ dizinini yeniden canlandırmak için. Orada hala bir init.d betiği olarak yeniden yazma çabasına değmeyecek bazı basit senaryolarım var (örneğin, dmesg'i kök dizine postalamak için bir Q&D betiği, diğeri de boşta kalan mürettebatı devre dışı bırakmak için hdaparm'ı kullanmak ve başka bir tane okumak için) ileri büyüklükte) ve diğer tüm önyükleme zamanı komut dosyalarından sonra çalıştırılmalarından dolayı mutluyum.

Örneğin

echo "$(date +%s),$(date),$(uname -a)"  >> /var/log/reboot.log

[ -d /etc/rc.boot ] && run-parts /etc/rc.boot

Ayrıca, bu yılın başlarında centos ve debian dağıtımları için ec2 stili meta verileri openstack'tan (on http://169.254.169.254/) almak için /etc/rc.local komut dosyaları yazdım, böylece VM'ler IP'lerini, ana bilgisayar adlarını, ssh anahtarlarını ve diğer örneğe özel bilgileri alabilirler. . cloud-init o zamandan beri bu dağıtımlara aktarıldı, bu yüzden senaryolar artık kullanılmıyor.


3

rc.localDosya Debian olmayan init tarzı sistemlerle uyumluluk için çoğunlukla. Kullanmamalısın.

Bunun yerine, /etc/init.d/Skeletonçalışma seviyelerini değiştirirken ne olacağını inservbilmek için yeni bir init betiğine kopyalamanız ve ardından etkinleştirmek için kullanmanız önerilir .


Güncelleme: Aşağıdaki yoruma göre, bu cevabı artık tavsiye etmiyoruz. Ancak bu cevap yayınlanmıştır birkaç yıl iskelet kaldırılmasından önce ve bu iskelet hala var Debian Ocak 2019 tarihinden itibaren kararsız.


unix.stackexchange.com/a/480897/5132 /etc/init.d/skeleton bu şekilde değildir.
JdeBP
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.