Jak debugować skrypty Upstart?


67

Z jakiegoś powodu pojawia się błąd podczas aktualizacji apport , którego przyczyną jest

% sudo service apport start
start: Job failed to start

W sysvinit mogłem debugować tego rodzaju problem, uruchamiając np

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

ale wydaje się, że nie można tego przypisać do Upstart. Co mam teraz spróbować?

Okazuje się, że istnieje obejście , które pozwoli na kontynuowanie instalacji. Ale nadal interesuje mnie ogólne pytanie, w jaki sposób śledzić skrypt.


1
Pracuję nad dokładniejszą odpowiedzią, ale dzięki za link do obejścia tego samego dnia przydarzyło mi się uaktualnianie natty!
Mark Russell

Haha i wydali poprawkę 12 minut temu. Czy uruchamianie wersji beta nie jest zabawne? (nie, naprawdę!)
Mark Russell

+ Muhammad opublikował poprawną odpowiedź poniżej.
Travis Reeder

Znalazłem przydatne informacje do debugowania w /var/log/syslog.
Matt

Odpowiedzi:


29

Wszystkie poniższe informacje (i znacznie bardziej przydatna pomoc Upstart) pochodzą z książki kucharskiej Upstart . Sekcja 18 obejmuje debugowanie. http://upstart.ubuntu.com/cookbook/#debugging

W tym konkretnym przypadku śledzenia sekcji „skryptowej” zadania Upstart należy dodać następujące wiersze bezpośrednio pod słowem „skrypt”:

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

Przyczyną tego nieparzystego położenia jest to, że /dev/.initramfs/ jest dostępny na bardzo wczesnym etapie rozruchu, przed załadowaniem głównego systemu plików, i nadal jest dostępny po uruchomieniu. Zgaduję z apportem, jednak prawdopodobnie nie musisz używać tej ścieżki. Mimo to miło jest poznać tę opcję.

Należy również zauważyć, że wszystkie skrypty są uruchamiane za pomocą set -edowolnego polecenia, które zakończy się niepowodzeniem, całkowicie je opuści. To ma sens, ponieważ należy bardzo uważać, uruchamiając skrypty jako root.

Gorąco polecam zapoznanie się z książką kucharską Upstart, do której odsyłam, ogólnie dla wszystkich osób pracujących z zadaniami Upstart.


Dzięki za to, gdybym nie widział, że problem został rozwiązany, prawdopodobnie zmodyfikowałbym skrypt, aby włączał się, set -xjak sugerujesz. Zastanawiałem się głównie, czy można to zrobić w bardziej przejrzysty sposób.
poolie 21.04.2011

Tak, nie wiem o tym (a jeśli nie ma go w książce kucharskiej, oznacza to, że prawdopodobnie po prostu nie ma). Oprócz tego pomysłu, większość wspomnianych technik debugowania dotyczy bardziej rozwiązywania problemów z samymi zdarzeniami Upstart i Upstart, i tam zwykle się znajduję. :)
Mark Russell

A jednak ta metoda zawiedzie, jeśli setuidi setgidsą wykorzystywane w pracy.
0xC0000022L

/dev/.initramfs nie zawsze jest obecny. Właśnie natrafiłem na maszynę, która nie ma tej ścieżki.
Sarge Barszcz

110

Upstart rejestruje wykonanie usługi w pliku dziennika o tej samej nazwie w /var/log/upstart/your-service-name.log. To powinno być pomocne.


2
Racja, wygląda na to, że obejmuje to stderr zleceń, więc gdybym je włączył set -x, prawdopodobnie tam by się pojawił.
poolie

1
W moim skrypcie /etc/init.d/Xservice wstawiłem instrukcję dziennika opartą na echu, ale nie pojawia się ona w tej lokalizacji! System operacyjny: Ubuntu 14.04 Trusty
Champ

Dlaczego nie syslog? Czy mogę zasugerować ogólną funkcję, być może sam rsyslog, że upstart i dowolny komponent użyłby do zapisu do syslog, jeśli nie jest dostępny, lub do tymczasowego miejsca, które zostanie przeniesione do syslog jak najszybciej. Znalezienie tego zajęło mi pół dnia. Prześlij tę uwagę TIA.
Papou,

4
Wydaje się, że nie jest to już prawdą w 16.04, przynajmniej od 15.10: ostatnie pliki w tym katalogu są datowane bezpośrednio przed wydaniem 15.10.
FGM

1
@FGM dzieje się tak, ponieważ 16.04 już nie używa upstart, używa systemd. Dostęp do dzienników można uzyskać za pomocąjournalctl
Jeremy,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.