Bagaimana cara men-debug pekerjaan pemula?

10

Saya memiliki pekerjaan sebagai berikut /etc/init/collector:

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

expect daemon

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

Ketika saya memulai pekerjaan sudo service collector start, itu hang. Jika saya ctrl-cdan lari initctl list, saya melihat ini:

collector start/killed, process 616

Saya tidak bisa melihat contoh twistddaemon di ps, dan server HTTP yang seharusnya disediakannya tidak ada.

Saya bahkan mencoba ini tanpa 'mengharapkan daemon' dan dengan panggilan sederhana ke skrip bash satu baris menggunakan scriptbait, dan itu masih tidak berhasil. Saya pikir saya melakukan sesuatu yang sangat salah. Apa itu?

Cera
sumber
Tidak ada jawaban, tapi saya kesulitan dengan masalah yang sama. Bahkan mungkin ada bug di Upstart: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 Saya tidak tahu bagaimana cara mendapatkan dari keadaan menggantung ini selain me-reboot. Saya juga percaya itu ada hubungannya dengan expect daemongaris.
membahayakan

Jawaban:

14

Anda dapat mengarahkan stdoutdan stderrseluruh shell menggunakan scriptpragma (bukan exec) bersamaan exec >FILE 2>&1, seperti:

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

Mudah-mudahan itu akan memberi Anda wawasan yang lebih baik tentang apa yang terjadi. Saya menemukan ini berguna untuk menangkap semua jenis masalah dalam skrip pemula saya. Anda dapat mem-pipe perintah stdout/ stderrsecara langsung, tetapi Anda akan kehilangan kesalahan yang berasal dari shell (seperti kesalahan sintaksis).

Di sisi lain, jika servicedigantung, itu mungkin bahkan tidak mengenai skrip Anda, dalam hal ini tentu saja tidak ada yang membantu.

Charles
sumber
Terima kasih, ini menempatkan saya di jalur yang benar. Pada akhirnya saya menyalurkan output ke logger, sehingga saya hanya bisa mengekor /var/log/syslog.
Cera
Selain itu, kesalahan dalam file conf itu sendiri ditampilkan di dmesg. Saya menemukan ini setelah saya tidak mendapatkan output apa pun ketika menggunakan di atas. Saya telah membuat kesalahan ketik di arahan chdir.
codingFoo
Di mana Anda meletakkan kode itu?
kev
2

Ada juga console logdeklaratif, seperti yang didefinisikan di sini: http://upstart.ubuntu.com/cookbook/#console-log

Saya tidak cukup tahu tentang pemula untuk mengetahui apakah itu diaktifkan secara default, tetapi Anda dapat mengaktifkannya berdasarkan pekerjaan per pemula, itu akan secara default output ke /var/log/upstart/<job>.log

Ehtesh Choudhury
sumber
0

Validasi bahwa sutradara pemula ada, dan tambahkan log konsol sebelum fase skrip. (dalam versi pemula baru kemudian 1,4 itu default)

log konsol

skrip exec> / path / ke / some_log_file 2> & 1 exec skrip your_command_di sini

Untuk info lebih lanjut, periksa utas: /ubuntu/207143/how-to-diagnose-upstart-errors/932155#932155

zachlaniado
sumber