Systemd drop-in gagal membuat file PID


11

Saya memiliki drop-in untuk systemd-machined di path /etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf. ketika saya menjalankan systemctl status systemd-machinedsaya melihat garis

Drop-In: /etc/systemd/system/systemd-machined.service.d
       └─10-machined-pid-file.conf

Namun, saya tidak melihat file PID di / var / run /. Yang berdasarkan drop-in saya:

[Serivce]
PIDFile=/var/run/machined.pid

Saya percaya seharusnya tidak ada masalah membuat file PID itu. Apakah ada sesuatu yang saya lewatkan?

Jawaban:


18

The PIDFile=pengaturan tidak membuat file PID. Itu masih tergantung pada layanan itu sendiri untuk dilakukan, sama seperti yang telah terjadi selama 40 tahun terakhir. Sebaliknya, opsi ini memberi tahu systemd di mana menemukan file PID yang ada (jika ada). Dalam kebanyakan kasus itu tidak diperlukan sama sekali, karena systemd akan menjaga layanan di cgroup mereka sendiri dan tidak memerlukan file PID untuk melacak mereka. Namun, systemd akan menghapus file PID ketika layanan keluar, jika layanan gagal untuk membersihkan sendiri.

Dari dokumentasi :

Mengambil nama file absolut yang menunjuk ke file PID dari daemon ini. Penggunaan opsi ini disarankan untuk layanan Type=yang diatur ke forking. systemd akan membaca PID dari proses utama daemon setelah memulai layanan. systemd tidak akan menulis ke file yang dikonfigurasi di sini, meskipun itu akan menghapus file setelah layanan telah dimatikan jika masih ada.


Terima kasih atas klarifikasi. Dalam kasus saya playframework membuat file pid di folder root proyek, tetapi menghentikan atau membunuh proses / layanan ini tidak menghapus file "pid". Jadi saya tidak bisa memulai kembali layanan proyek saya karena file "pid". Menambahkan baris "PIDFile = / path / ke / pid" ke file layanan systemd saya berfungsi dengan baik. Itu menghapus file pid jika layanan dihentikan atau dibunuh
Ikrom

10

Sayangnya, systemd tidak akan membuat file PID untuk layanan non-forking bahkan jika Anda menentukan PIDFile=baris dalam file unit layanan. Tetapi Anda mungkin bisa menipu dengan sebuah ExecStartPost=garis, seperti:

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
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.