Bagaimana cara men-debug skrip pemula?

67

Untuk beberapa alasan, saya mendapatkan pesan kesalahan saat peningkatan versi, yang penyebabnya adalah

% sudo service apport start
start: Job failed to start

Di bawah sysvinit, saya bisa men-debug masalah seperti ini dengan menjalankan mis

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

tapi itu tampaknya tidak memetakan ke Pemula. Apa yang harus saya coba selanjutnya?

Ternyata ada solusi yang akan membiarkan instalasi dilanjutkan. Tapi saya masih tertarik dengan pertanyaan umum tentang bagaimana orang akan melacak skrip.

Poolie
sumber
1
Saya sedang mengerjakan balasan yang lebih menyeluruh, tetapi terima kasih atas tautan ke solusinya, hal yang sama terjadi pada saya memperbarui hari ini juga!
Mark Russell
Haha, dan mereka merilis perbaikannya 12 menit yang lalu. Tidak menjalankan Beta menyenangkan? (tidak juga!)
Mark Russell
+ Muhammad memposting jawaban yang benar di bawah ini.
Travis Reeder
Saya menemukan info debug yang berguna di /var/log/syslog.
Matt

Jawaban:

29

Semua informasi berikut (dan bantuan Pemula yang jauh lebih bermanfaat) berasal dari The Upstart Cookbook . Bagian 18 meliputi debugging. http://upstart.ubuntu.com/cookbook/#debugging

Dalam kasus khusus ini melacak bait "skrip" dari pekerjaan pemula, Anda harus menambahkan baris berikut tepat di bawah kata "skrip":

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

Alasan untuk lokasi yang ganjil adalah bahwa /dev/.initramfs/ tersedia di boot paling awal, sebelum sistem file root telah dimuat, dan terus tersedia setelah boot. Saya menebak dengan apport, namun, Anda mungkin tidak perlu menggunakan jalur itu. Namun, senang mengetahui opsi itu.

Perlu juga dicatat bahwa semua skrip dijalankan dengan set -esehingga perintah apa pun yang gagal akan keluar sepenuhnya dari skrip. Yang masuk akal, karena orang harus sangat berhati-hati ketika menjalankan skrip sebagai root.

Saya sangat merekomendasikan untuk membaca Buku Pustaka pemula yang terhubung di atas secara umum untuk siapa saja yang bekerja dengan pekerjaan pemula.

Mark Russell
sumber
Terima kasih untuk itu, jika saya tidak melihat bug teratasi, saya mungkin akan memodifikasi skrip untuk dihidupkan set -xseperti yang Anda sarankan. Saya kebanyakan bertanya-tanya apakah ada cara yang lebih bersih untuk melakukannya.
poolie
Ya, bukan yang saya tahu (dan jika tidak ada di buku masak, itu berarti mungkin tidak ada). Selain dari ide itu, sebagian besar teknik debugging yang disebutkan lebih lanjut tentang pemecahan masalah Upstart dan Upstart sendiri, yang mana saya biasanya menemukan diri saya sendiri. :)
Mark Russell
Namun metode ini akan gagal jika setuiddan setgiddigunakan dalam pekerjaan.
0xC0000022L
/dev/.initramfs tidak selalu ada. Saya baru saja menemukan mesin yang tidak memiliki jalur ini.
Sarge Borsch
110

Mulai baru eksekusi layanan Anda dalam file log dengan nama yang sama di /var/log/upstart/your-service-name.log. Itu harus membantu.

Muhammad Gelbana
sumber
2
Benar, sepertinya ini termasuk stderr pekerjaan, jadi jika aku menyalakannya set -xmungkin akan muncul di sana.
poolie
1
Saya memasukkan pernyataan log berbasis gema di skrip /etc/init.d/Xservice saya tetapi tidak muncul di lokasi ini! OS: Ubuntu 14.04 Trusty
Champ
Kenapa tidak syslog? Bolehkah saya menyarankan fitur umum, mungkin rsyslog itu sendiri, yang pemula dan komponen apa pun akan digunakan untuk menulis ke syslog jika tidak tersedia, atau ke tempat sementara yang akan ditransfer ke syslog secepatnya. Butuh setengah hari untuk menemukan ini. Tolong teruskan komentar ini TIA.
Papou
4
Ini tampaknya tidak lagi benar dalam 16,04, tampaknya sejak 15,10 setidaknya: file terakhir dalam direktori itu berasal dari tanggal tepat sebelum rilis 15,10.
FGM
1
@FGM ini karena 16,04 tidak lagi menggunakan pemula, ia menggunakan systemd. Log diakses denganjournalctl
Jeremy