Jak debugować pracę upstart?

10

Mam następującą pracę w /etc/init/collector:

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon

exec /usr/bin/twistd -y /path/to/my/tac/file

Kiedy zaczynam pracę sudo service collector start, zawiesza się. Jeśli ctrl-ci biegnę initctl list, widzę to:

collector start/killed, process 616

Nie widzę instancji twistddemona w ps, a serwer HTTP, który powinien zapewniać, nie istnieje.

Próbowałem nawet tego bez „oczekiwanego demona” iz prostym wywołaniem do jednowierszowego skryptu bash przy użyciu scriptzwrotki, i nadal nie działa. Myślę, że robię coś bardzo złego. Co to mogło być?

Cera
źródło
Brak odpowiedzi, ale mam problem z podobnym problemem. Może to być nawet błąd w programie Upstart: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 Nie wiem, jak wyjść z tego stanu zawieszenia poza restartem. Uważam też, że ma to związek z expect daemonlinią.
zaszkodzi

Odpowiedzi:

14

Można przekierować stdouti stderrcałej skorupy przy użyciu scriptpragma (zamiast exec) w połączeniu z exec >FILE 2>&1, tak jak poniżej:

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script

Powinno to dać lepszy wgląd w to, co się dzieje. Uznałem to za przydatne do wychwytywania różnego rodzaju problemów w moich skryptach upstart. Państwo może rura Twój polecenia użytkownika stdout/ stderrbezpośrednio, ale będziesz przegapić błędów pochodzących z powłoki (np błędy składniowe).

Z drugiej strony, jeśli servicesię zawiesi, może nawet nie uderzyć w twój skrypt, w którym to przypadku oczywiście nic nie pomoże.

Charles
źródło
Dzięki, postawiłem mnie na właściwej drodze. Na koniec podłączyłem dane wyjściowe do logger, aby móc po prostu ogonić /var/log/syslog.
Cera,
Dodatkowo, błędy w samym pliku conf są pokazane w dmesg. Dowiedziałem się tego, gdy nie otrzymałem żadnych danych wyjściowych, gdy korzystam z powyższego. Napisałem literówkę w dyrektywie chdir.
codingFoo
Gdzie umieszczasz ten kod?
kev
2

Istnieje również console logdeklaratywny, jak zdefiniowano tutaj: http://upstart.ubuntu.com/cookbook/#console-log

Nie wiem wystarczająco dużo na temat upstartu, aby wiedzieć, czy jest on domyślnie włączony, ale możesz go włączyć dla poszczególnych zadań upstart, domyślnie wyświetli się /var/log/upstart/<job>.log

Ehtesh Choudhury
źródło
0

Sprawdź, czy istnieje istniejący dyrektor i dodaj dziennik konsoli przed fazą skryptu. (w wersji upstart wyższej niż 1.4 jest to ustawienie domyślne)

dziennik konsoli

script exec> / path / to / some_log_file 2> & 1 exec skrypt_konieczny_końca

Aby uzyskać więcej informacji sprawdź wątek: /ubuntu/207143/how-to-diagnose-upstart-errors/932155#932155

zachlaniado
źródło