Bagaimana cara debug unit systemd ExecStart


12

Saya ingin tahu apakah saya dapat mencetak ExecStart/ExecStopbaris perintah yang diperluas sepenuhnya . Pertimbangkan contoh berikut:

ExecStart=/usr/bin/java $OPTS_COMMON $OPTS $OPTS_LOG $OPTS_DEBUG some.class.Start --param1 ${PARAM1} --param2 ${PARAM2}

Saya memiliki baris perintah yang cukup panjang dengan banyak variabel lingkungan yang terlibat. Jika beberapa variabel menjadi salah (misalnya dengan konfigurasi drop-in), layanan mungkin tidak memulai sama sekali. Namun saya tidak melihat garis yang diperluas sepenuhnya dengan envs pengganti di mana saja dan saya berjuang untuk mencari tahu apa yang salah.

Saya tidak beruntung googling ini dan sejauh ini satu-satunya kemungkinan yang saya temukan adalah memodifikasi file unit untuk dijalankan /usr/bin/echodaripada layanan itu sendiri. Tapi itu agak melelahkan. Atau solusi yang lebih menyebalkan - periksa setiap variabel lingkungan satu-per-satu.

Apakah ada cara bagaimana memaksa systemd untuk menunjukkan kepada saya apa yang sebenarnya ingin dijalankan?

Jawaban:


9

Sayangnya tidak ada built in way. Untuk melihat ExecStart akhir, Anda dapat mengaktifkan debugging. Edit file /etc/systemd/system.confdan atur LogLevel=ke debug. Maka Anda akan melihat sesuatu seperti:

java.service About to execute: /usr/bin/java $OPTS_COMMON...Ini tidak menyelesaikan masalah Anda, tetapi baik untuk melihat penggantian specifier systemd. https://www.freedesktop.org/software/systemd/man/systemd.unit.html(specifiers)

Tetapi jika Anda benar-benar ingin masuk ke bagian bawah penggantian argumen, Anda perlu melihat di sini: https://github.com/systemd/systemd/blob/7ce9cc154576e342015eab8c1500790a9ededc01/src/core/execute.c#L2570


Saya agak takut tidak ada cara melakukannya. : / Terima kasih.
pystole

2

Dalam * .layanan file di bagian [Layanan]

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.