Neden başlangıç ​​servisim sistem önyüklemesinde başlamıyor?


37

İtibaren ardından bu soruya , basit bir sonradan görme servisi (yazdım /etc/init/pms.conf şöyle benim başsız Ubuntu Sunucu 11,04 kutu için):

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

Bu hizmeti istenirse komut satırından başlatabilir (veya durdurabilirim):

service pms start

Ve gerçekten çalıştığını görebiliyorum.

Ancak, makinemi ilk başlattığımda servis başlamıyor. Eğer kutuya SSH koyarsam ve servis durumunu kontrol edersem, alıyorum:

$ service pms status
pms stop/waiting

Sorum şu: bu neden oluyor? Hizmetim neden açılışta başlamıyor?

GÜNCELLEME 1 : hizmetimin başlatılıp başlatılmadığından ve daha sonra ölmekte olup olmadığından emin değilim veya PMS.sh'a şunu ekledim:

echo "STARTED" > $STARTLOG

Bu tabii ki bana bakmam gereken bir şey veriyor . Bunu servisi kendim başlatarak ve sonra start.log dosyasını kontrol ederek test ettim . Daha sonra start.log dosyasını sildim ve yeniden başlattım . Yeniden başlatmanın ardından orada değildi, bu yüzden sanki start-up kesinlikle hizmetime başlamıyormuş gibi görünüyor. Sanırım bu süreçte daha erken bir noktada ölüyor olabilirdi, ama bunun basitliği göz önüne alındığında oldukça düşük görünüyor.

GÜNCELLEME 2 : Daha yeni bir yükseltme içeren 11.10'a yükselttim, ancak bu sorun hala devam ediyor.

GÜNCELLEME 3 : İstediğim gibi ile başlattım --debug. Kedinin çıktısı /var/log/syslog | grep initsoruya yerleştirmek için çok uzun, ama siz burada görüyorsunuz .

GÜNCELLEME 4 : Daha fazla günlük, bu kez başlangıçta conf yer alır. Koş 1 ve koş 2 .


Komut dosyasının çalıştırılmadığından emin misiniz? Pms dur / beklemede mesajı, başlangıç ​​işinin çalıştırıldığı ve tüm komutların normal şekilde sonlandırıldığı anlamına gelir.
düzenleme

Çıktısını ekleyin cat /var/log/syslog | grep initadresindeki yönergeleri kullanarak sonradan görme için önyükleme loggging etkinleştirdikten sonra Sonradan görme Debugging
Ciaran Liedeman

@Anarci: lütfen soruma güncelleme 3 bakın.
Kent Boogaart

Çoğu kullanıcı ziyade böyle bir pastebin sitesine bir bağlantı sağlamak, böyle there email adresini vermeyecektir Ubuntu pastebin
Ciaran Liedeman

@Anarci: bitti - lütfen sorumu görün.
Kent Boogaart

Yanıtlar:


19

İşin ayrıntılarını arttırmayı öneriyorum, örneğin başlangıç ​​öncesi / başlangıç ​​sonrası girişleri kullanarak.

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

Daha fazla bilgi için http://upstart.ubuntu.com/cookbook/

Ayrıca http://upstart.ubuntu.com/wiki/Debugging’e bir göz atın


Bu gerçekten kafamı karıştırıyor. Görevinin arkasında bir düzine farklı şey denedim. Hepsi kayıtlarda değişen gizli mesajlarda başarısız oldu. Son denemem init ile sonuçlandı : pms ana süreci (1329) durum 143 ile sona erdi , bu da bana zarar verdi. PMS.sh'nin henüz başlatılmadığını görebiliyorum, çünkü ilk yaptığı şey kendi günlüğüne yazıyor ve bu günlük girişi mevcut değil. Hedef dosyanın var olduğunu ve çalıştırılabilir olduğunu gösteren başlangıç ​​öncesi çıktımı görebiliyorum. Bunu yarın tekrar alırım, ancak herhangi bir fikriniz varsa, duymayı çok isterim. Teşekkürler.
Kent Boogaart

merhaba @KentBoogaart, aynı problemin var gibi görünüyor Bir çözüm buldun mu?
Daniele B,

@KentBoogaart Seninle aynı problem mi var? Seninki ile bir şansın var mı?
Mevin Babu 13:14

14

Burada muhtemelen olan, ağ bağdaştırıcılarınız gelmeden önce ve muhtemelen geri döngü bağdaştırıcısından (lo) önce pms'nin başlamasıdır. PS3 Media Server hakkında konuştuğumuzu varsayalım, bu ağ bağlantılı bir hizmet ve muhtemelen hiçbir arabirim olmadan başlamaktan hoşlanmıyor.

Kriterlerdeki başlangıcınızı şu şekilde değiştirmeyi deneyin:

start on filesystem and net-device-up IFACE!=lo

Yani, herhangi bir "gerçek" ağ arayüzü kurulduktan sonra başlayın. Bununla birlikte, eğer bir sonraki arabirim eth0 ise, bu ideal olmayabilir, PMS başlar, ancak PMS'nin wlan0'ı kullanmasını istersiniz, bu işe yaramaz. Servis başlayacaktır ancak dinlemesini istediğiniz arayüzü seçmemiş olabilir. Üzerinden aktarılacağınız arayüzü bildiğinizi varsayar ve değişmeyeceğini varsayarsak, işe koyardım, örneğin:

start on filesystem and net-device-up IFACE=wlan0

Oneiric (11.10) 'de, olayı static-network-upstatik olarak yapılandırılmış tüm cihazları beklemek için kullanabilirsiniz . Bu hoş bir şey çünkü bir arayüze kodlamadan ağa bağlı işleri yazmanıza izin veriyor. [Not: "statik olarak yapılandırılmış tüm cihazlar" ile, /etc/network/interfacesNetworkManager yerine kullanmaya atıfta bulunuyorum . DHCP'ye göre statik IP anlamında statik anlamına gelmez.]


Bu hile gibi geldi, ama işe yaramadı. Ben sadece var love eth0ama ikinci öneri kullandı: start on filesystem and net-device-up IFACE=eth0. Hala bir yeniden başlatmadan sonra gitmek yok. PMS günlüğünde öncü olabilecek bir şey farkettim. Araştırıp geri döneceğim ...
Kent Boogaart

İlginç. Bahsetmediğim bir şey, orijinal senaryonuzu denedim ve makinem için önyükleme çalıştı. Bunu sadece beraberlik şansına bağladım (yani yarış durumumda iyi araba kazandı ve seninki kötü araba kazandı). Burada başka hangi bağımlılığı özlediğimizi gerçekten göremiyorum. Tuhaf.
Mark Russell,

2
Başladıktan sonra başlatabileceğiniz için, başka bir hizmet bağımlılığı eksik olmalıyız. İşe yarayabilecek (ancak bizi hiç aydınlatmayacak) kirli bir kesmek sleep 10, kabuk betiğini çalıştırmadan önce "başlangıç ​​öncesi betiğe" sadece bir veya daha yüksek bir değerde bırakmaktır.
Mark Russell,

Üzgünüm Mark - ama aynı sayfadayız. Uyku öncesi 10 şeyi zaten başlangıç ​​öncesi bir komut dosyasında denedim. Gitme. Sonra debug.log dosyasını tamamen silmeyi ve yeniden başlatmayı denedim. Önyüklemeden sonra aynı servis durumuna sahiptim ve hiçbir debug.log dosyası yoktu, bu yüzden PMS'nin gerçekten çalıştığına ikna olmadım. Bunu teşhis etmenin kolay bir yolu var mı? Bazı çıktıları tükürmek için PMS.sh'yi değiştirirsem, nereye gidecek? Sanırım her zaman kendi dosyama yönlendirebilirim - bundan sonra bir şans verebilir.
Kent Boogaart

Ben sadece sorumu daha fazla bilgi ile güncellendi.
Kent Boogaart

3

Syslog'unuzu incelemekten sonra, pms işlemi hatasız bir şekilde başlar, ancak kısa bir süre sonra hedefi baştan sona kesilir, yani öldürülür.

Bu biraz gariptir çünkü repsawn yan tümcesini eklediniz, böylece durdurulduktan sonra tekrar başlamaya çalışmalı, ancak asla başlamaz. Bu yüzden respawn cümlesini çıkardığını tahmin ediyorum.

Pms servisi arasında sadece 2 servis başlatılıyor ve durduruluyor ufw ve network-interface (eth0), 1 ise udev-fallback-graphics başlıyor.

Görünüşe göre pms paralel olarak başlatılıyor. Ne yazık ki, başlangıç ​​belgelendirme, start on ...vanilya ve start on starting ...ve arasındaki kesin farklar konusunda biraz bulanık start on started ....

Başlangıç ​​seviyenizi değiştirmeyi deneyin

start on started networking

ya da sadece

start on net-device-up IFACE=eth0

Net-up-up olayı çok daha geç geldiği için log çıkışı biraz garip geliyor ancak pms ondan önce başlıyor.

Bu, işleminizin yalnızca tüm ağ kurulumu tamamlandıktan sonra başlatılmasını sağlamalıdır;

Ayrıca log çıktısına tamamen güvenmiyorsunuz, önyükleme işleminin başında herhangi bir dosyaya çıkış çıktısı her zaman çalışmıyor. Debugging Upstart'taki cevaba bakınız.


3

Bunun yerine runlevel'de start kullanarak benzer bir sorunu çözmeyi başardı:

start on runlevel [2345]

3

Ben aynı sorunu vardı ve sonunda ben onu çözdüm basitçe ile:

start on runlevel [2345]

herhangi olmadan net-device-upveya started networkingmalzeme

Bu tam bir başlangıç ​​betiği ve mükemmel çalışıyor:

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

1

chkconfigRHCSA / CE eğitimim sırasında karşılaştım :

sudo apt-get install chkconfig
sudo chkconfig pms on

Olanakları hakkında daha fazla ayrıntı için Oneiric adam sayfasını kontrol edebilirsiniz .


1

Bunun için bir çözüm buldum ama anlamadım. PMS'yi sahip olarak kök dışına /home/administratorve /bin/pmskök dizinine taşırsam, her şey yolunda gider .

Onu altında bırakır, /home/administrator/ancak kök /home/administrator/dizinin kendisi bar her şeyin sahibi olduğundan emin olun , yine de çalışmaz.

Yöneticiyi her şeyin sahibi olarak ayarladıysam ve komut dosyamın ilgili bölümünü değiştirirsem:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

Hala çalışmıyor.

Sanırım şimdilik bir /home/root/dizin oluşturacağım ve her şeyi oraya taşıyacağım, ancak bunu tamamen anlamak istiyorum.


Yani chkconfigişe yaramadı mı? Dizinin PMS.shkök dizinine girmeyi denedin mi? Yalnızca çözümünüz işe yararsa, Upstart'ın Launchpad sayfasına gidin ve doğrudan devs ile iletişime geçin.
Oxwivi

Ve sadece hareket ettirmek yeterliyse, .sho zaman her şeyi orada bırakın ve o dizini işaret etmek için betiği düzenleyin (hatta dizini değiştirilsin mi?).
Oxwivi

Evet, tüm PMS dizini root'a ait yapmaya çalıştım. Muhtemelen işe yaramadı çünkü / home / manager / root tarafından sahiplenilmedi.
Kent Boogaart

Bu zaten bir şey ifade etmiyor, düzenli olarak / home dizinimdeki komut dosyalarını başlangıçta sorunsuzca çalıştırıyorum, garip.
düzenleme

Hatta yabancı: Ben sadece / home / root / altındaki herşeyi denedim. İşe yaramadı. Her şeyi / bin / pms altına geri taşıdım ve tekrar çalıştı. Öyle görünüyor ki, PMS'i alt / evden başlatmaya çalışmak sistemimde çalışmıyor.
Kent Boogaart

1

Senaryomun evimdeki bir dosyaya bağlı olduğunu ve eve erişilemediğinden, standart ubuntu mekanizmasıyla (.Private) şifrelenmiş olduğunu fark ettiğimde benzer bir "başlama" sorunu yaşamadım.

start on local-filesystems Olay, şifre çözme işlemi sona ermeden önce (muhtemelen) yayınlanır.


1

Ev dizininiz NFS'de mi? Bazen kök NFS'ye erişemez.

Kayıt için, şu anda küçük sınavımda 12.04 tarihinde:

  • start on started networkingve start on network-interface-up INTERFACE=eth0 işe yarama ama

  • start on started network-interface INTERFACE=eth0 yapar.

İş ağlarını her zaman durduğunu gösteren şekilde gösteren http://os4.org/wiki/upstart.html teşekkürler .initctl list


Başvurulan bağlantı bozuldu.
slm


0

@ Xuhcc'ye benzer şekilde, buraya Vagrant Upstart betiğimin neden çalışmadığını öğrenmek için geldim. Aşağıdakilerin çalışması gerekiyordu:

serseri monteli başlatmak

Ancak aşağıdaki hata nedeniyle bazı yapılarda yok.

https://github.com/mitchellh/vagrant/issues/6074

Raporda listelenen geçici çözüm benim için harika çalıştı:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

Benim için harika çalıştı


0

benim için çalıştı (iface sonrası servis başlatmaya ihtiyacım var):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
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.