Upstart komut dosyalarında nasıl hata ayıklayabilirim?


67

Nedense itiraz yükseltmeleri sırasında hata alıyorum , nedeni

% sudo service apport start
start: Job failed to start

Sysvinit altında, bu tür bir sorunu örneğin

sudo sh -x /etc/init.d/whatever start

ama bu Upstart ile eşleşmiyor gibi görünüyor. Şimdi ne denemeliyim?

Kuruluma devam etmesine izin verecek bir geçici çözüm olduğu ortaya çıktı . Fakat hala senaryoyu nasıl takip edeceğimize dair genel soruya ilgi duyuyorum.


1
Daha kapsamlı bir cevap üzerinde çalışıyorum, ancak geçici çözümün bağlantısı için teşekkür ederim, aynı şey bugün natty'yi güncelledi!
Mark Russell,

Haha, düzeltmeyi 12 dakika önce yayınladılar. Beta çalıştırmak eğlenceli değil mi? (gerçekten hayır!)
Mark Russell

+ Muhammed aşağıda doğru cevabı gönderdi.
Travis Reeder, 19

İçinde yararlı hata ayıklama bilgisi buldum /var/log/syslog.
Matt

Yanıtlar:


29

Aşağıdaki bilgilerin tümü (ve çok daha faydalı bir Upstart yardımı), Upstart Cookbook'a aittir . Bölüm 18, hata ayıklamayı kapsar. http://upstart.ubuntu.com/cookbook/#debugging

Bir Başlangıç ​​işinin "script" stanza'sını izlemek için bu özel durumda, "script" kelimesinin hemen altına aşağıdaki satırları eklemelisiniz:

exec 2>>/dev/.initramfs/myjob.log
set -x

Tek konumun nedeni, /dev/.initramfs/ 'nin çok erken önyüklemede, kök dosya sistemi yüklenmeden önce mevcut olması ve önyüklemeden sonra da kullanılabilir olmaya devam etmesidir. Apport ile tahmin ediyorum, ancak muhtemelen bu yolu kullanmanıza gerek yoktur . Yine de, seçeneği bilmek güzel.

Ayrıca, tüm komut dosyalarının çalıştığı ve set -ebu sayede başarısız olan herhangi bir komutun komut dosyasından tamamen çıkacağı belirtilmelidir. Mantıklı, bir komut dosyası kök olarak çalıştırırken çok dikkatli olunmalıdır.

Genelde yukarıda belirtilen Upstart işleriyle çalışan herkes için yukarıda verilen Upstart Cookbook'a danışmanızı tavsiye ederim.


Bunun için, hatanın çözüldüğünü görmemiş olsaydım, muhtemelen set -xönerdiğiniz gibi açıklanacak komut dosyasını değiştirirdim . Bunu yapmanın daha temiz bir yolu olup olmadığını merak ediyordum.
poolie

Evet, bildiğimden değil (ve eğer yemek kitabında değilse, bunun anlamı muhtemelen yok demektir). Bu fikrin yanı sıra, belirtilen hata ayıklama tekniklerinin çoğu, genellikle kendimi bulduğum Upstart ve Upstart olaylarının sorunlarını giderme hakkındadır. :)
Mark Russell

Ve yine bu yöntem başarısız olur setuidve setgidişlerde kullanılır.
0xC0000022L

/dev/.initramfs her zaman mevcut değildir. Bu yola sahip olmayan bir makineyle karşılaştım.
Sarge Borsch

110

Upstart, servis işlemlerinizi aynı adda bir günlük dosyasına kaydeder /var/log/upstart/your-service-name.log. Yardımcı olmalı.


2
Tamam, sanki bu işlerin dizisini içeriyor gibi görünüyor, bu yüzden eğer açarsam set -xmuhtemelen orada ortaya çıkar.
poolie,

1
/Etc/init.d/Xservice betiğime yankı tabanlı bir günlük ifadesi yazdım ama bu konumda görünmüyor! İşletim Sistemi: Ubuntu 14.04 Güvenilir
Champ

Neden syslog yapmıyorsun? Eğer başlangıçta ve herhangi bir bileşenin mevcut değilse syslog'a yazmak için kullanabileceği veya en kısa sürede syslog'a aktarılacak geçici bir yere kullanabileceği genel bir özellik, belki de rsyslog'un kendisini önerebilir miyim? Bunu bulmam yarım günümü aldı. Lütfen bu notu TIA ile iletin.
Papou

4
Bu, artık en azından 15.10'dan beri, 16.04'te doğru görünmüyor: Bu dizindeki son dosyalar, 15.10 sürümünden hemen önce tarihli.
FGM

1
@FGM bunun nedeni 16.04'ün artık upstart kullanmaması, systemd kullanmasıdır. Günlüklere erişilirjournalctl
Jeremy
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.