Şu anda Ubuntu'da yazılımın hizmet olarak başlatılması için üç farklı yol var, Sistemvname, Sonradan görme ve sistemdname. Burada bir hizmet, doğrudan kullanıcı tarafından başlatılan ve çalıştırılanın aksine, sistem tarafından arka planda çalıştırılan bir program olarak tanımlanır.
Sistemvname
Linux'ta hizmetleri başlatmanın geleneksel yolu, bir komut dosyası yerleştirmekti /etc/init.d
, ve sonra kullan update-rc.d
komut (veya RedHat tabanlı dağıtımlarda, chkconfig
etkinleştirmek veya devre dışı bırakmak için.
Bu komut, sembolik bağlantılar oluşturmak için biraz karmaşık mantık kullanır /etc/rc#.d
bu, hizmetlerin başlatılma sırasını kontrol eder. Eğer kaçarsan ls /etc/rc2.d
hizmetlerin aşağıdaki gibi bir dosya adıyla öldürülme sırasını görebilirsiniz K##xxxx
ve dosya adlarıyla başladı S##xxxx
. Bu ##
içinde S##xxxx
hizmet için "başlangıç siparişi" anlamına gelir xxxx
. Tersine, ##
içinde K##xxxx
hizmet için öldürme emri anlamına gelir xxxx
.
İle bir büyük sorun Sistemvname sistemi önyüklerken bu muydu, her şey seri olarak yapılmalıydı, birbiri ardına, sistem önyükleme sürelerini gerçekten yavaşlatıyordu. Bunu paralelleştirmek için girişimlerde bulunuldu, ancak gelişigüzel ve tam olarak yararlanmak zordu. Bunun başlıca nedeni buydu Sonradan görme oluşturuldu.
Sonradan görme
Upstart, iş tanımı dosyalarını kullanır /etc/init
bir hizmetin hangi olaylarda başlatılması gerektiğini tanımlamak için. Böylece, sistem önyüklenirken, upstart çeşitli olayları işler ve ardından paralel olarak birden çok hizmeti başlatabilir. Bu, örneğin, başka bir CPU'ya bağlı hizmet çalışırken veya ağ dinamik bir IP adresinin atanmasını beklerken diske bağlı bir hizmeti başlatarak sistemin kaynaklarını tam olarak kullanmalarını sağlar.
Tüm başlangıç iş dosyalarını çalıştırarak görebilirsiniz ls /etc/init/*.conf
Burada durmama izin verin ve bir hizmetin ne olduğunu veya ne yaptığını bilmiyorsanız, onu devre dışı bırakmayın!
Tüm hizmetler sonradan görmeye dönüştürülmedi. Son birkaç aydır Canonical'daki sunucu ekibinde çalışırken, bir dizi dönüştürülmüş iş dosyası üzerinde çalıştım ve en güzel yanı, tüm "sihir" komut dosyasından kurtulmasına ve tam olarak nasıl başlayacağınızı tanımlamak için buraya ve oraya birkaç komut koymasına izin vermesidir. hizmet ve başka bir şey değil. Ama şimdilik, sadece bir avuç geleneksel ağ hizmeti, örneğin kalamar ve samba, dönüştürüldü.
Bir hizmet başlangıç tabanlı mı?
Bir hizmetin başlangıç tabanlı olup olmadığını anlamak için durum komutunu çalıştırabilirsiniz:
status servicename
Eğer bir sonradan görme eyüp, bunu gösterecek.:
$ status statdstatd start/running, process 942
Ama değilse, daha çok böyle bir şey göreceksin.:
$ status apache2status: Unknown job: apache2
Bu durumda, apache2
dönüştürülmedi sonradan görme. Yani, devre dışı bırakmak için apache2
sadece çalıştırın
sudo update-rc.d apache2 disablesudo service apache2 stop
Upstart'ta hizmetleri (işleri) devre dışı bırak
Upstart iş tanımları yok update-rc.d
komut. İşi devre dışı bırakmak için iş dosyasını devre dışı bırakmak üzere doğrudan düzenlemeniz gerekir. Bunu yapmak için iki yol vardır.
Eğer hala elle başlatmak mümkün olmak istiyorsanız, o zaman açıklama gerekiyor start on
koşul. Yüklemek istediğinizi söyleyin samba ama otomatik olarak başlamasın. İşte iş dosyası (natty'de):
description "SMB/CIFS File Server"author "Steve Langasek <steve.langasek@ubuntu.com>"start on local-filesystemsstop on runlevel [!2345]respawnpre-start script RUN_MODE="daemons" [ -r /etc/default/samba ] && . /etc/default/samba [ "$RUN_MODE" = inetd ] && { stop; exit 0; } install -o root -g root -m 755 -d /var/run/sambaend scriptexec smbd -F
Sakatlamak samba, sadece bir koyabilirsiniz #
önünde "start on local-filesystems
". Önyüklemede yedeklenmeyecek olsa da, bu sefer yine de durdurmanız gerektiğini unutmayın
sudo service smbd stop
Ancak, asla istemezseniz samba başlamak için paketi kaldırmanızı öneririm. Eğer yüklü istediğiniz, ama başlatılabilir, sen de yap:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Başlat / durdur stanzasını kullanarak bir hizmeti devre dışı bırakma (11.04 itibariyle)
11.04'te olacak olan upstart sürümünden başlayarak, devre dışı bırakan yeni bir anahtar kelime var start on
ve stop on
kıtalar: manual
. Bu nedenle, hizmeti 11.04'ten itibaren devre dışı bırakmanın başka bir yolu da yapmaktır:
echo 'manual' | sudo tee /etc/init/mysql.override# command from root shellecho manual >> /etc/init/mysql.override
Bir tane oluşturabilirsiniz override
iş tanımını hiç düzenlemeden bir hizmeti devre dışı bırakmak için dosyayı manual
içinde anahtar kelime var.