Tamam, Alex, nokta Linux tüm kullanıcı alanı süreçleri ile başladı olmasıdır initçalıştırın kimin pid Örneğin 1'dir, sürecin pstreekimin kökü init edilir senin süreçlerin ağacı görmek için .. birkaç versiyonu vardır initsüreç uygulanması günümüzde en dikkat çekici
- sysVinit (klasik init, hala eski Debian dahil olmak üzere bazı dağıtımlar tarafından kullanılıyor)
- Daha eski Ubuntu ve bazı RHEL (Red Hat) ve daha eski Fedora versiyonları tarafından kullanılan başlatma başlangıcı
- systemd init, modern Fedora, Ubuntu, Debian, RHEL, SUSE versiyonları tarafından kullanılmaktadır.
Geleneksel olarak, Unix'ler, inix olarak adlandırılan init uygulamasını , Unix'in https://ru.wikipedia.org/wiki/UNIX_System_V versiyonunun sysVinitadıyla kullanır . Çok etkilidir ve diğer girdiler geriye uyumludur.
Temel olarak, sysVinit ilk önce /etc/inittabdosyayı okur , hangi runlevel'in çalıştırılacağına karar verir ve script'e /etc/init.d/rcinit betiklerini çalıştırmasını söyler . Bir çok kullanıcılı çalışma seviyesi, normal olarak, çizme genellikle • Örneğin, Ubuntu 2 çalışma seviyesi , /etc/init.d/rcyürütülüyor komut başlatır /etc/rc2.d. Buradaki dosyalar komut dosyalarına yalnızca sembolik bağlanırken, komut dosyaları kendi /etc/init.ddizininde saklanır . /etc/rc*.dDizinlerdeki bu sembolik bağların isimleri aşağıdaki gibidir. Söyleyin, aşağıdaki komut dosyalarını aldık /etc/rc2.d:
$ls /etc/rc2.d
S16rsyslog
S17apache2
K02network-manager
Bu, runlevel 2 init işlemine geçişte ilk önce network-managerişlemleri öldürür , komut dosyasının ismi ile başlar K- K02network-managerve sonra isimleri ile başlayan işlemleri başlatır S. İki basamak sonra Sveya Ksırasını belirler 00'dan 99'a sayıdır, süreçler içinde başlatılır. Örneğin rsyslogdaha önce başlatılır apache2, 16 mantıklı az 17 (çünkü, sen apache rsyslog günlüğe kaydetme kapasitesine güvenmek istiyorum çünkü , bu nedenle ilk önce rsyslog başlatılmalıdır). Komut dosyaları, sırayla çalışan kabuk komutlarıdır #!/bin/sh.
Yani, temelde sysvinit tarzında başlangıçta bir programı başlatmak için, kendi el yazısı yazmak (herhangi bir örnekten onu kopyalamaya karşı yapıştırarak, içeri var /etc/init.d), koyun /etc/init.dve, örneğin makul bir ad altında buna bir sembolik oluşturmak
S99mytrojaniçinde /etc/rc2.d. İşte /etc/init.d http://docs.oracle.com/cd/E19683-01/806-4073/6jd67r96g/index.html adresindeki tipik sysVinit betiklerinin bir açıklaması
Şimdi, Ubuntu adamları init'ten ek işlevsellik istemelerine karar verdi. Hızlı başlatılan bir işletim sistemi istediler, bu yüzden senaryolarının paralel olarak yürütülmesini istediler; ölü işlemlerin otomatik olarak yeniden başlatılmasını istediler; işlemlerin birbirlerini açık bir şekilde olaylarla çağırmasını istediler (böylece apache "syslog started" olayı tarafından çalıştırılıyor, syslog da "dosya sistemleri monte edilmiş" olayı vb. tarafından çalıştırılıyor, bu yüzden bazı sayılar yerine olaylarımız var 00 -99). Böylece, Upstart'ı başlattılar ve işte böyle çalışıyor. Başlangıcı initscripts /etc/initdizine konur (karıştırmayın /etc/init.d). Upstart genellikle çalışır /etc/init.d/rc, bu yüzden sysVinit scriptlerinizi normal şekilde çalıştırır. Ancak betiğinizin çıkışta yeniden çizilmesini istiyorsanız - Upstart olayları tam size göre.
Senaryomun çalışıp çalışmadığını kontrol edemesem de, sanırım amaçlarınız için aşağıdaki /etc/init/mytrojan.confsenaryoyu yazmalısınız :
start on runlevel [02]
respawn
exec mytrojan --argument X
Ancak, bağımlılıklara, en azından dosya sistemlerine ve ağa ihtiyacınız varsa, bunun start on runlevel [02]gibi bir şeyle değiştirmek mantıklı olabilir :
start on (local-filesystems and net-device-up IFACE!=lo)
UYARI: Bunun doğruluğunu kontrol etmedim, çünkü yapamam. Özellikle ağ bağlantınız kurulduktan sonra script'in nasıl başlatılacağından emin değilim ( bu sürümü kullandım ). "Ağda başlatma" için Google'ı deneyin.