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.

poolie
źródło
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.

Mark Russell
źródło
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.

Muhammad Gelbana
źródło
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,